Der Befehl \jobname
gibt normalerweise den Dateinamen ohne Pfad und Erweiterung aus, sodass in einer Datei mit dem Namen foo.tex
nur ausgegeben wird foo
. Mit pdflatex foo.test
oder beim Kompilieren aus LaTeXila habe ich dieses Ergebnis sicherlich erhalten. Aber ausGummiwas ich erhalte ist.foo.tex
Weiß jemand, warum Gummi anders kompiliert wird und wie ich das übliche \jobname
Verhalten in Gummi erreichen kann?
Bearbeiten: Aufgrund der hilfreichen Antworten von @JosephWright und @Herbert frage ich mich, ob es möglich ist, die \jobname-Korrektur in Gummi nur durchzuführen, wenn die Quelle die Erweiterung .swp hat oder .tex in \jobname bestehen bleibt.
Das heißt, ich hätte gerne eine Lösung wie:
\makeatletter
\let\JobName\jobname
\ifthenelse{\equal{\detokenize{foo}}{\jobname}}
{}
{
\def\@JobName.#1.#2\@nil{#1}
\def\jobname{\expandafter\@JobName\JobName\@nil}
}
\makeatother
Mit dieser Bedingung kann überprüft werden, ob der Jobname foo ist oder nicht. Ich möchte jedoch eine allgemeine Lösung, die unabhängig vom Dateinamen ist (und nicht auf die Zeichenfolge foo beschränkt ist).
Antwort1
Wenn ich mir das „Build Log“ ansehe, das ich mit einer foo.tex
Testdatei erhalte, scheint es, dass Gummi tatsächlich kompiliert .foo.tex.swp
, was unter Unix aufgrund des führenden verborgen ist .
und die Erweiterung .swp
nicht hat .tex
. TeX zeigt Ihnen also die richtigen Informationen an. Zum Beispiel mit der Demodatei
\documentclass{article}
\begin{document}
Hello world
\end{document}
gespeichert, wenn foo.tex
ich ein Protokoll bekomme
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
\write18 enabled.
entering extended mode
(/home/joseph/Desktop/.foo.tex.swp
LaTeX2e <2011/06/27>
Babel <v3.8m> and hyphenation patterns for english, dumylang, nohyphenation, ge
rman-x-2012-05-30, ngerman-x-2012-05-30, afrikaans, ancientgreek, ibycus, arabi
c, armenian, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danis
h, dutch, ukenglish, usenglishmax, esperanto, estonian, ethiopic, farsi, finnis
h, french, friulan, galician, german, ngerman, swissgerman, monogreek, greek, h
ungarian, icelandic, assamese, bengali, gujarati, hindi, kannada, malayalam, ma
rathi, oriya, panjabi, tamil, telugu, indonesian, interlingua, irish, italian,
kurmanji, latin, latvian, lithuanian, mongolian, mongolianlmc, bokmal, nynorsk,
polish, portuguese, romanian, romansh, russian, sanskrit, serbian, serbianc, s
lovak, slovenian, spanish, swedish, turkish, turkmen, ukrainian, uppersorbian,
welsh, loaded.
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/size10.clo))
(/tmp/.foo.tex.aux) [1{/usr/local/texlive/2012/texmf-var/fonts/map/pdftex/updma
p/pdftex.map}] (/tmp/.foo.tex.aux) )</usr/local/texlive/2012/texmf-dist/fonts/t
ype1/public/amsfonts/cm/cmr10.pfb>
Output written on /tmp/.foo.tex.pdf (1 page, 11541 bytes).
SyncTeX written on /tmp/.foo.tex.synctex.gz.
Transcript written on /tmp/.foo.tex.log.
Ich fürchte, ich habe keine Lösung (außer „einen anderen Editor verwenden“), da es anscheinend keine Gummi-Einstellung gibt, um dieses Verhalten zu ändern.
Die bearbeitete Frage verlangt einen „flexiblen“ Ansatz basierend auf Herberts Code. Mit der Einschränkung, dass dies einen einfachen Fall voraussetzt (der Dateiname enthält nur ein einzelnes Zeichen, .
um die Erweiterung zu trennen, außer wenn er dort beginnt, .
wo Gummi verwendet wird):
\makeatletter
\begingroup
\def\@jobname#1.#2\q@nil{%
\ifx\relax#1\relax
\expandafter\expandafter\expandafter\@@jobname
\else
\expandafter\@@@jobname
\fi
\jobname\q@nil
}
\def\@@jobname.#1.#2\q@nil{#1}
\def\@@@jobname#1\q@nil{#1}
\xdef\jobname{\expandafter\@jobname\jobname.\q@nil}
\endgroup
\makeatother
Antwort2
Verwendung in der Präambel:
\makeatletter
\let\JobName\jobname
\def\@JobName.#1.#2\@nil{#1}
\def\jobname{\expandafter\@JobName\JobName\@nil}
\makeatother
funktioniert dann \jobname
wie gewohnt. Das Obige ist nur zum Ausführen einer Datei mit nützlich gummi
.