该命令\jobname
通常打印文件名而不打印路径和扩展名,因此在名为的文件中将foo.tex
只打印foo
。使用pdflatex foo.test
或从 LaTeXila 编译我当然获得了这个结果。但从橡胶我得到的是.foo.tex
\jobname
有谁知道为什么 Gummi 的编译方式不同以及如何在 Gummi 中获得通常的行为?
编辑: 根据@JosephWright 和 @Herbert 的有益回答,我想知道是否有可能在 Gummi 中执行 \jobname 校正,仅当源在 \jobname 中保留 .swp 扩展名或 .tex 时才执行 \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 的地方开始):
\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
。