The relevant variables in the script are
LATEX
, PRODUCT_TYPE
, and VIEWER
. Their values in the script shown before were to use latexmk
to build a PDF and PDFView to display it. However, other settings are possible. For example, setting LATEX='pdflatex "$FILE"'
VIEWER='open "$PRODUCT"'
PRODUCT_TYPE=pdf
builds a PDF using VIEWER='open "$PRODUCT"'
PRODUCT_TYPE=pdf
pdflatex
and shows it in Preview. These settings would be quite suitable for a "vanilla" installation, assuming no extras are installed beyond TeX. A more flexible approach is to use those vanilla settings as defaults, and allow them to be overridden, giving
LATEX=${SEE_LATEX_COMPILER:-'pdflatex "$FILE"'}
VIEWER=${SEE_LATEX_VIEWER:-'open "$PRODUCT"'}
PRODUCT_TYPE="${SEE_LATEX_PRODUCT_TYPE:-pdf}"
Now, if we run the script from the shell, we can set environment variables to change how the script does its work. VIEWER=${SEE_LATEX_VIEWER:-'open "$PRODUCT"'}
PRODUCT_TYPE="${SEE_LATEX_PRODUCT_TYPE:-pdf}"
Within SEE, the environment variables will be provided by the AppleScript that runs the script. The change is relatively simple: we extend the string that calls our shell script to also set the environment variables. Since a number of minor changes to the AppleScript have accumulated, I'll show the whole thing:
tell application "SubEthaEdit"
if exists path of front document then
if modified of front document then
try
save front document
end try
end if
set filePath to path of front document
set lineNumber to startLineNumber of selection of front document
set modeResources to resource path of mode of front document
else
error "You have to save the document first"
end if
end tell
set buildScript to prependEnvironment onto (join of {quotedForm for (modeResources & "/Scripts/shell/buildlatex.sh"), quotedForm for filePath, lineNumber} by space)
do shell script buildScript
on seescriptsettings()
return {displayName:"Typeset and View PDF", shortDisplayName:"Typeset", keyboardShortcut:"@b", toolbarIcon:"ToolbarIconBuildAndRun", inDefaultToolbar:"yes", toolbarTooltip:"Typeset and view the current document", inContextMenu:"no"}
end seescriptsettings
on join of tokenList by delimiter
set oldTIDs to text item delimiters of AppleScript
set text item delimiters of AppleScript to delimiter
set joinedString to tokenList as string
set text item delimiters of AppleScript to oldTIDs
return joinedString
end join
on quotedForm for baseString
quote & baseString & quote
end quotedForm
to prependEnvironment onto scriptString
"export SEE_LATEX_COMPILER='latexmk -pdf -quiet \"$FILE\"'; export SEE_LATEX_PRODUCT_TYPE=pdf; export SEE_LATEX_VIEWER='/Applications/Skim.app/Contents/SharedSupport/displayline \"$LINE\" \"$PRODUCT\" \"$FILE\"';" & scriptString
end prependEnvironment
if exists path of front document then
if modified of front document then
try
save front document
end try
end if
set filePath to path of front document
set lineNumber to startLineNumber of selection of front document
set modeResources to resource path of mode of front document
else
error "You have to save the document first"
end if
end tell
set buildScript to prependEnvironment onto (join of {quotedForm for (modeResources & "/Scripts/shell/buildlatex.sh"), quotedForm for filePath, lineNumber} by space)
do shell script buildScript
on seescriptsettings()
return {displayName:"Typeset and View PDF", shortDisplayName:"Typeset", keyboardShortcut:"@b", toolbarIcon:"ToolbarIconBuildAndRun", inDefaultToolbar:"yes", toolbarTooltip:"Typeset and view the current document", inContextMenu:"no"}
end seescriptsettings
on join of tokenList by delimiter
set oldTIDs to text item delimiters of AppleScript
set text item delimiters of AppleScript to delimiter
set joinedString to tokenList as string
set text item delimiters of AppleScript to oldTIDs
return joinedString
end join
on quotedForm for baseString
quote & baseString & quote
end quotedForm
to prependEnvironment onto scriptString
"export SEE_LATEX_COMPILER='latexmk -pdf -quiet \"$FILE\"'; export SEE_LATEX_PRODUCT_TYPE=pdf; export SEE_LATEX_VIEWER='/Applications/Skim.app/Contents/SharedSupport/displayline \"$LINE\" \"$PRODUCT\" \"$FILE\"';" & scriptString
end prependEnvironment
The basic strategy is still to construct a string that calls our shell script and feed it into
do shell script
. The string is changed in two ways. First, since the shell script now takes a line number as a second argument, I get the current line from SEE and pass it in. Second, and of more immediate interest, I set the environment variables and prepend those to the earlier buildScript
. I've simplified the construction by defining join
, quotedForm
, and prependEnvironment
handlers. PrependEnvironment
sets the SEE_LATEX_COMPILER
, SEE_LATEX_PRODUCT_TYPE
, and SEE_LATEX_VIEWER
environment variables, customizing the behavior of the shell script. In the above AppleScript, I have set the environment so that latexmk
and Skim are used to build and view a PDF.
No comments:
Post a Comment