[OS X TeX] New TeXShop macro: "Insert reference"

Will Robertson will at guerilla.net.au
Fri Aug 20 21:29:59 CEST 2004


Hello again

I seem to be getting caught up in creating scripts for TeXShop at the 
moment.
By popular demand you may be able to convince me to write them for 
iTeXMac as well.

This script is for inserting references. You won't need to ever 
remember a label name again! I suggest the key combo CMD+SHIFT+R. Hit 
the keys and click your reference - that's it. Read the blurb of the 
script for more info.

Please try it out and let me know how you go. It it works, tell me and 
I'll be happy! If it doesn't, I can fix the problems. If all's well, 
I'll put it up on my site.

Ciao!
Will

PS If you know anything about grep/sed/awk and wouldn't mind looking at 
my commands, I'd be very grateful (there's just three one liners all 
piped together). I'm just winging it, so I don't know if I'm doing it 
efficiently or even correctly. Bit of a UNIX newbie - I only know 
enough to do damage, really.


ATTACHED TEXSHOP MACRO:
(COPY/PASTE INTO A NEW ITEM IN THE MACRO EDITOR TO INSTALL)

--Applescript

-- "INSERT REFERENCE", for TeXShop
-- This script searches through the current file (or within every file 
in the current folder) for \label{...} commands, then pops up a list 
for you to choose from which you may insert one. It will cut down the 
list to include only those entries that contain the current selection. 
So if you type "sec" and select it, then run this script, you will get 
a choice of only, e.g., "sec:intro","sec:conc","fig:secunia", but not 
other labels in your document e.g., "cha:monkey","equ:maxwell",etc. The 
inserted reference label is wrapped in a (optional) customisable LaTeX 
command.
-- 2004 Will Robertson


-- CUSTOMISE TO YOUR LIKING:

property ref_command: "ref" -- or "vref" or "fref" etc... N.B. no 
backslash!
-- Inserts e.g. "\ref{fig:ladle}" or "\vref{fig:ladle}" or ... based on 
this property
-- Put "" to insert the plain label: e.g. "fig:ladle" 

property only_scan_current_file: false
-- If false, the script will search through every .tex file in the 
folder containing the current file.
-- This is useful for projects with other \include{} -ed files in the 
same folder.
-- Otherwise, it will only look in the current file.



--THE SCRIPT:

tell application "TeXShop"

if only_scan_current_file
	set searchtexfiles to the quoted form of #TEXPATH# -- the current 
file: /path/to/docu.tex
else
	set texpath to alias posix file #TEXPATH#
	tell application "Finder" to set texfolder to the container of 
(texpath as alias)
	set texdir to the posix path of (texfolder as alias)
	set alltexfiles to the quoted form of texdir & "*.tex"
	set searchtexfiles to alltexfiles
end if

set current_selection to the content of the selection of the front 
document

-- DO SHELL SCRIPT COMPONENTS:
set find_label_lines to ("grep -h '\\\\label' " & searchtexfiles) as 
string
set trim_to_raw_labels to " | sed 's/.*\\\\label{//' | sed 's/}.*//'"
set search_restrict to (" | grep " & quoted form of current_selection) 
as string

set get_labels_shell_script to find_label_lines & trim_to_raw_labels & 
search_restrict
set all_labels_str to do shell script get_labels_shell_script
set all_labels to every paragraph of all_labels_str

set label_insert to choose from list all_labels
if label_insert /= false
	if ref_command = "" then
		set ref_insert to label_insert
	else
		set ref_insert to "\\" & ref_command & "{" & label_insert & "}"
	end if
	set the selection of the front document to ref_insert as string
end if

end tell

--------------------- 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 Post: <mailto:MacOSX-TeX at email.esm.psu.edu>





More information about the macostex-archives mailing list