コマンドは\jobname
通常、パスと拡張子なしでファイル名を印刷するので、というファイル内ではfoo.tex
だけが印刷されますfoo
。LaTeXilapdflatex foo.test
を使用したりコンパイルしたりすることで、確かにこの結果が得られました。しかし、グミ私が得たものは.foo.tex
\jobname
Gummi がなぜ異なる方法でコンパイルされるのか、またGummi で通常の動作を実現するにはどうすればよいのか知っている人はいますか?
編集: @JosephWright と @Herbert の役立つ回答に基づいて、ソースに .swp 拡張子があるか、.tex が \jobname に残っている場合にのみ、Gummi で \jobname 修正を実行できるかどうか疑問に思っています。
つまり、次のような解決策が望まれます。
\makeatletter
\let\JobName\jobname
\ifthenelse{\equal{\detokenize{foo}}{\jobname}}
{}
{
\def\@JobName.#1.#2\@nil{#1}
\def\jobname{\expandafter\@JobName\JobName\@nil}
}
\makeatother
この条件はジョブ名が foo であるかどうかをチェックするために機能しますが、ファイル名に依存しない (文字列 foo に限定されない) 一般的なソリューションが必要です。
答え1
テストファイルで取得した「ビルドログ」を見るとfoo.tex
、Gummi は実際には をコンパイルしているようです。.foo.tex.swp
これは、先頭の によって Unix では隠されており.
、拡張子は ではあり.swp
ません.tex
。つまり、TeX は正しい情報を表示していることになります。たとえば、デモファイルの場合
\documentclass{article}
\begin{document}
Hello world
\end{document}
foo.tex
ログを取得すると保存されます
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.
この動作を変更する Gummi 設定がないようですので、残念ながら解決策はありません (「別のエディターを使用する」以外)。
編集された質問は、Herbert のコードに基づいた「柔軟な」アプローチを求めています。これは単純なケースを想定しているという制限があります (ファイル名には、 Gummi が使用されている場所.
から始まる場合を除き、拡張子を区切るための文字が1 つだけ含まれています.
)。
\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
答え2
前文での使用:
\makeatletter
\let\JobName\jobname
\def\@JobName.#1.#2\@nil{#1}
\def\jobname{\expandafter\@JobName\JobName\@nil}
\makeatother
その後は\jobname
通常どおり動作します。上記は、 を含むファイルを実行する場合にのみ役立ちますgummi
。