구미의 \jobname

구미의 \jobname

이 명령은 \jobname일반적으로 경로와 확장명 없이 파일 이름을 인쇄하므로foo.tex 일반적 으로foo . LaTeXila를 사용하거나 pdflatex foo.testLaTeXila에서 컴파일하여 확실히 이 결과를 얻었습니다. 하지만구미내가 얻는 것은.foo.tex

Gummi가 다르게 컴파일되는 이유와 평소와 같은 컴파일 방법을 아는 사람이 있습니까?\jobnameGummi가 왜 다르게 컴파일되고 Gummi에서

편집하다: @JosephWright 및 @Herbert의 유용한 답변을 바탕으로 소스에 .swp 확장자가 있거나 \jobname에 .tex가 지속되는 경우에만 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.texGummi가 실제로 컴파일하는 것 같습니다. .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.

관련 정보