[OS X TeX] synchronization BBEdit-->TeXniscope and root files

Claus Gerhardt gerhardt at math.uni-heidelberg.de
Fri Nov 26 21:46:46 EST 2004


The script below takes care of the synchronization of included files - 
or those loaded via the input command - with the marginpar sync in red.

The following points should be observed:

1. All subsidiary files should include the line

%SourceDoc relativePathofrootfile  (I changed the strings so that they 
are identical to TeXShop's)

2. The packages pdfsync and color have to be loaded.


The reverse synchronization TeXniscope--> BBEdit works also very well 
in this situation.

Claus

-- Applescript
-- To be used with BBEdit
-- sync
-- Claus Gerhardt, Nov. 2004

(* The subroutine setnamebbedit returns baseName, texName, pdfName, 
namePath, dirName, dirNameunquoted, and saves the document of window 
texName.
*)

--set previewer to "TeXShop"
set previewer to "TeXniscope"
--set previewer to "Acrobat  6.0.1 Professional"
--set previewer to "Preview"

if previewer is equal to "Acrobat  6.0.1 Professional" then
	set process_name to "acrobat"
else
	set process_name to previewer
end if

tell application "BBEdit"
	get file of window 1
	set filepath to result
	set fileName to POSIX path of filepath as string
	
	
	
	set scriptPath to (do shell script "dirname " & 
"~/Library/TeXShop/Scripts/ex")
	set scriptPath to scriptPath & "/setnamebbedit.scpt"
	set scriptName to POSIX file scriptPath as alias
	set scriptLiB to (load script scriptName)
	tell scriptLiB
		set {baseName, texName, pdfName, namePath, dirName, dirNameunquoted, 
logName, logPath, rtfName} to setnamebbedit(fileName)
	end tell
	select document texName
	set sourceLine to startLine of selection as number
	set current clipboard to "\\marginpar{\\textcolor{red}{sync}}" as 
string
	paste
	save document texName
	set texName1 to texName
	
	tell application "BBEdit"
		get file of window 1
		set filepath to result
		set fileName to POSIX path of filepath as string
		
		set scriptPath to (do shell script "dirname " & 
"~/Library/TeXShop/Scripts/ex")
		set scriptPath to scriptPath & "/setnamebbedit.scpt"
		set scriptName to POSIX file scriptPath as alias
		set scriptLiB to (load script scriptName)
		tell scriptLiB
			set {baseName, texName, pdfName, namePath, dirName, dirNameunquoted, 
logName, logPath, rtfName} to setnamebbedit(fileName)
		end tell
		
		set foundboolean to "false"
		try
			find "%SourceDoc (.+\\.tex)" searching in lines 1 thru 3 of text 1 
of text window 1 options {search mode:grep, starting at top:true, wrap 
around:false, backwards:false, case sensitive:false, match words:false, 
extend selection:false} with selecting match
			set {foundboolean, foundText} to {found of result as string, found 
text of result}
		end try
	end tell
	if foundboolean is equal to "true" then
		set n to (number of characters of contents of foundText)
		set i to 2 as number
		
		repeat while i < (n + 1)
			if character i of foundText is equal to " " then
				set k to i
				exit repeat
			else
				set i to (i + 1)
			end if
		end repeat
		set texFile to (characters (k + 1) thru n of foundText as string)
		set dirName2 to do shell script "dirname " & texFile
		set texName to do shell script "basename " & texFile
		
		set shellScript to do shell script "/usr/bin/bbedit " & dirName & "/" 
& dirName2 & "/" & texName
		do shell script shellScript
	end if
	
	
	
	set texPath to namePath & ".tex"
	set texFile to texPath as POSIX file
	set thePDF to pdfName as POSIX file
	try
		set shellScript to "cd " & dirName & ";"
		set shellScript to shellScript & "~/Library/TeXShop/bin/pdflatexc  " 
& texName
		do shell script shellScript
		do shell script shellScript
	end try
	
	set logFile to logPath as POSIX file
	
	set findString to "Emergency stop"
	
	set findString to "'Emergency stop'"
	set foundText to "no error"
	try
		set shellScript to "cd " & dirName & ";"
		set shellScript to "/usr/bin/egrep -w -n  " & findString & " " & 
logPath
		do shell script shellScript
		
		set foundText to result as string
		set n to (number of characters of contents of foundText)
		set i to 1 as number
		
		repeat while i < (n + 1)
			if character i of foundText is equal to ":" then
				set k to i
				exit repeat
			else
				set i to (i + 1)
			end if
		end repeat
		set lineNumber to (characters 1 thru (k - 1) of foundText as string)
		set theLine to lineNumber as number
	end try
	
	if foundText is equal to "no error" then
		set thePDF to POSIX file pdfName as alias
		set scriptPath to (do shell script "dirname " & 
"~/Library/TeXShop/Scripts/ex")
		set scriptPath to scriptPath & "/preview_bbedit.scpt"
		set scriptName to POSIX file scriptPath as alias
		set scriptLiB to (load script scriptName)
		tell scriptLiB
			preview_bbedit(texName, thePDF, previewer, process_name)
		end tell
		tell application "TeXniscope"
			activate
			refresh of the front document
			the front document goto line sourceLine of source texPath
		end tell
	else
		beep
		do shell script "bbedit " & "+" & theLine & " " & logPath
	end if
end tell
tell application "BBEdit"
	select document texName1
	find "\\marginpar{\\textcolor{red}{sync}}" searching in text 1 of text 
window 1 options {search mode:literal, starting at top:true, wrap 
around:false, backwards:false, case sensitive:false, match words:false, 
extend selection:false} with selecting match
	set selection of window 1 to ""
	save document texName1
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 MacOSX-TeX mailing list