[OS X TeX] a user-defined engine for TeXShop (was adjusting TexShop's Bibliography macro)

Daniel Becker daniel.becker at uni-rostock.de
Sat Mar 4 01:08:51 EST 2006


While the original problem can be solved with an apple-script macro  
see other post, an engine can do the same job, that is running a  
whole sequence of pdflatex, bibtex and makeindex that is necessary to  
produce a valid pdf...

Thanks to Peter and Herb for explaining how to deal with filenames  
etc in a shell-script etc. The script that works as expected is  
documented below.

Daniel

>>> I tried (several hours) to adjust the  Bibliography macro that  
>>> comes with TexShop to my needs. All I want to do is to have two  
>>> more runs than already present in the macro.

>> How about writing an "engine" for this job?
>>
>> An engine is a little shell script that does a complicated batch  
>> job, for example like ps4pdf.engine.
>>
>> You can take as template one of the (makeindex) scripts in ~/ 
>> Library/TeXShop/bin and copy it under an easy to understand name  
>> to ~/Library/TeXShop/Engines/<name>.engine, then add pdflatex and  
>> other makeindex lines ... and in your TeX source put among the  
>> first lines:
>>
>> 	%!TEX TS-program = <name>
>>
>> so that TeXShop texs your file with the right engine at once!

This is the engine file that does what I want:

#!/bin/tcsh
# pdflatex, bibtex,pdflatex,pdflatex,makeindex,pdflatex

set path = ($path  /usr/local/bin  /usr/local/teTeX/bin/`uname -p`- 
apple-darwin-current)

set fbName = `basename "$1" .tex`

pdflatex --shell-escape "${fbName}"

bibtex --shell-escape "${fbName}"

pdflatex --shell-escape "${fbName}"

pdflatex --shell-escape "${fbName}"

makeindex -c -s indexkorr.ist "${fbName}.idx"

pdflatex --shell-escape "${fbName}"




again, the index-stylefile indexkorr.ist needs to be in

~/Library/texmf/makeindex/

or in the working directory. Also, the engines in ~/Library/TeXShop/ 
Engines/ need to be executable, therefore, in the terminal:

[Daniel-Beckers-Mac:~] daniel% chmod -R 755 ~/Library/TeXShop/Engines/
[Daniel-Beckers-Mac:~] daniel% ls -l ~/Library/TeXShop/Engines/
-rwxr-xr-x   1 daniel  staff  110 Feb  5 03:50 XeLaTeX.engine
-rwxr-xr-x   1 daniel  staff  107 Feb  5 03:50 XeTeX.engine
-rwxr-xr-x   1 daniel  staff  423 Mar  4 06:52 fullrun.engine
-rwxr-xr-x   1 daniel  staff  412 Mar  2 15:15 ps4pdf_Bilder.engine


>
> The 'set path' statement comes first, before any command is  
> executed. A bit of optimisation can be to make it independent from  
> the processor used in the Mac:
>
> 	set path = ($path  /usr/local/bin  /usr/local/teTeX/bin/`uname -p`- 
> apple-darwin-current)
>
> pdflatex needs no '--shell-escape' accept is runs itself some  
> external command or script.
>
> Invoke in Terminal 'chmod 755 fullrun.engine' (and for  
> ps4pdf_Bilder.engine too).
>
>
>
> The problem is probably that the script receives the full file  
> name. It might work with:
>
> 	makeindex -c -s indexkorr.ist `basename "$1" tex`idx
>
> '`basename "$1" tex`' converts the full path name with the file  
> name's extension to the full path name without the extension "tex"  
> but with the dot ".", so you just need to add "idx" for the full  
> index name.
>
> Isn't it better to leave away the ".idx" extension? If so use this:
>
> 		makeindex -c -s indexkorr.ist `basename "$1" .tex`
>
> I think bibtex waits for a file name without extension, i.e.  
> `basename "$1" .tex`. And since it's now more than once that  
> basename is being used, it's worth to write:
>
> 		set fbName = `basename "$1" .tex`
>
> and then use "$fbName" instead of `basename "$1" .tex` and "$ 
> {fbName}.idx" instead of `basename "$1" tex`idx.
>
>
> And the first, commented makeindex, needs an argument like  
> pdflatex, i.e. "$1".

------------------------- Info --------------------------
Mac-TeX Website: http://www.esm.psu.edu/mac-tex/
          & FAQ: http://latex.yauh.de/faq/
TeX FAQ: http://www.tex.ac.uk/faq
List Archive: http://tug.org/pipermail/macostex-archives/




More information about the MacOSX-TeX mailing list