[OS X TeX] How to copy and paste tables into LaTeX (from Excel or other programs)?
Fredrik Wallenberg
fwallenberg at gmail.com
Wed Dec 7 01:13:23 CET 2005
I get an error from the applescript (expected ", " but found end of line)
On 12/6/05, Bernhard Barkow <bb at creativeeyes.at> wrote:
> Hi,
>
> On 06.12.2005, at 09:19, Jan Hegewald wrote:
> > Am 06.12.2005 um 08:29 schrieb Bernhard Barkow:
> >
> >> Wouldn't it be relatively easy (for an AppleScript expert, I mean)
> >> to write an import macro for TeXShop which parses the available
> >> clipboard data and creates a LaTeX table from it, with &s and \\s
> >> etc.? I don't know if that's possible at all, just had the idea...
> >
> > Some time ago I wrote an AppleScript which parses the clipboard to
> > insert the required & and \\ into a table data copied from Excel.
> > It only works for the rows. So you have to write the \tabular
> > header for yourself. If anyone is interested, I can see if I can
> > find it. Currently I use a ruby script to do this converting.
>
> I played around a little and came up with the script below. It takes
> tabular data from the clipboard, tries to find out how it is
> structured (tab- or comma-delimited etc.), asks for some options and
> then creates the tabular environment and inserts it into the document
> (replacing a current selection, if present).
> The result will probably still need some editing by the user. I don't
> know if it works with Excel (I don't have Excel), but it works from
> an AppleWorks spreadsheet, at least.
> I didn't have time to check extensively for bugs, and there are
> certainly lots of possible improvements (especially the handling of
> white space is not very sophisticated yet), but maybe it helps;
> although it won't be as powerful as an external ruby or python
> script, I suppose.
> Actually, I don't know why I didn't have that idea before, given my
> previous frustrations about importing tables into LaTeX...
>
> Bernhard
>
>
> /* AppleScript: copy the code below and paste it into a new TeXShop
> macro (Macros / Open Macro Editor… / New Item) */
>
> --AppleScript direct
> -- converts tabular clipboard data to LaTeX
> -- Bernhard Barkow 2005
> property kColSep : " & " as string
> property kSeparators : {tab, ";", space}
> property kDlgTitle : "Tabular data import"
> property kHline : "\\hline"
>
> tell application "TeXShop"
> -- prepare the clipboard data
> set cbd to the clipboard as string
> set cbl to paragraphs of cbd
> set tmpStr to the first item in cbl
> set sepChar to my getColSepChar(tmpStr)
>
> -- createthe table header
> set outText to "\\begin{tabular}{"
> set nColumns to my countSubstr(tmpStr, sepChar)
> set colDefText to ""
> -- get user input
> set colJust to text returned of (display dialog "Default column
> justification (l,c,r,c|,…):" default answer "c" with title kDlgTitle
> buttons {"OK"} default button 1)
> if (colJust = "") then set colJust to "c"
> set doHline to (button returned of (display dialog "Add \\hline?"
> with title kDlgTitle buttons {"Yes", "No"} default button 2) = "Yes")
> set tabLineBreak to " \\\\"
> set daLineSpc to (display dialog "Extra line spacing:" default
> answer "0pt" with title kDlgTitle buttons {"Ok", "None"} default
> button 1)
> -- append vertical spacing if required:
> if (button returned of daLineSpc = "Ok") then set tabLineBreak to
> tabLineBreak & "[" & (text returned of daLineSpc) & "]"
> if (doHline) then set tabLineBreak to tabLineBreak & return & kHline
> repeat with i from 1 to nColumns
> --if (i > 1) then set colDefText to colDefText & "|"
> set colDefText to colDefText & colJust
> end repeat
> set colDefText to colDefText & "}"
> set outText to outText & colDefText
> if (doHline) then set outText to outText & return & kHline
>
> -- split lines into columns
> set nLines to count (cbl)
> repeat with i from 1 to nLines
> set tmpStr to (item i of cbl)
> if (my countSubstr(tmpStr, sepChar) > 1) then
> set tableLine to return & my searchReplace(tmpStr, sepChar, kColSep)
> if (i < nLines or doHline) then
> set tableLine to tableLine & tabLineBreak
> end if
> set outText to outText & tableLine
> end if
> end repeat
>
> -- finalize the table
> set outText to outText & return & "\\end{tabular}"
> -- insert the converted tabular data int the document
> set selection of front document to outText
> end tell
>
> -- try to find the proper column separator
> on getColSepChar(txtStr)
> repeat with ch in kSeparators
> set sepChar to contents of ch
> if (txtStr contains sepChar) then exit repeat
> end repeat
> return sepChar
> end getColSepChar
>
> -- replace searchStr by replStr in txtStr
> on searchReplace(txtStr, searchStr, replStr)
> set {oldDelims, text item delimiters} to {text item delimiters,
> searchStr}
> set newText to text items of txtStr
> set text item delimiters to replStr
> set newText to newText as text
> set text item delimiters to oldDelims
> return newText
> end searchReplace
>
> -- count the occurrences of searchStr in txtStr
> on countSubstr(txtStr, searchStr)
> set {oldDelims, text item delimiters} to {text item delimiters,
> searchStr}
> set newText to text items of txtStr
> set n to count newText
> set text item delimiters to oldDelims
> return n
> end countSubstr
>
>
> ------------------------- 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/
>
>
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü‰ß£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌiÏÓyužnÈ{øm¶Ÿÿÿ
0ýë&þ›.ýçnþfœþ×±ÿñ@Cøm¶ŸÿþV{òjèÿuïßj¯Óyq at Cøm¶Ÿÿÿ
0þ×±ý§ÿºOßj¢â²Ð+r¯{øm¶ŸÿþÛ þŠàþ˜©z¹šŠ_æiÊ,µìÿj·!Š÷¬
More information about the macostex-archives
mailing list