[OS X TeX] Insert a column

Alain Schremmer Schremmer.Alain at gmail.com
Thu Dec 21 21:32:46 CET 2006


Herbert Schulz wrote:

>
> On Dec 21, 2006, at 12:51 PM, Alain Schremmer wrote:
>
>> Is there a way (other than by hand) to insert a new column in a 9  
>> column table (with a couple of hundred rows) that is already partly  
>> filled-in?
>>
>> Hopeful regards
>> --schremmer
>
>
> Howdy,
>
> There are a set of TeXShop macros (written in Applescript) that  
> create tables or arrays and can add/delete columns. I'm not sure if  
> they came with TeXShop or I added them later and I don't have the  
> name of the author either. Sigh...
>
> To add a column select the rows of the tabular and use the Add Column  
> macro. It will ask for the number of the column to add before/after  
> and also whether it is before/after. There will be bullets as marks  
> in the column contents so you can use the macros for finding bullets  
> (these come with the Command Completion files I put together) to go  
> to and select each mark so it is easy to add the new data.
>
> New Tabular-------------
> --Applescript direct
>
> -- CUSTOMISE TO YOUR LIKING:
> property indent : "  " -- edit this if you want other than 2 spaces  
> for your indent
> property cell_text : "• " -- edit this if you want a different text blob
>
> tell application "TeXShop"
>     set q1 to display dialog "New tabular" & return & return & "Enter  
> the number of columns you'd like and then select the type of tabular  
> you want." default answer "3" buttons {"Cancel", "Plain", "Booktabs"}  
> default button "Booktabs"
>     set NCOLS to the text returned of q1
>     set tabtype to the button returned of q1
>     
>     set q2 to display dialog "Enter the number of rows you'd like 
> (not  including a header row) and select whether you'd like a floating 
> or  simply centred table." default answer "3" buttons {"Cancel",  
> "Floating", "Centered"} default button "Centered"
>     set NROWS to the text returned of q2
>     set floattype to the button returned of q2
>     
>     if the tabtype = "Booktabs" then
>         set the toprule to "\\toprule"
>         set the midrule to "\\midrule"
>         set the bottomrule to "\\bottomrule"
>     else
>         set the toprule to "\\hline"
>         set the midrule to "\\hline"
>         set the bottomrule to "\\hline"
>     end if
>     
>     if the floattype = "Floating" then
>         set the beforetext to ¬
>             "\\begin{table}[htbp]" & return & ¬
>             indent & "\\centering" & return & ¬
>             indent & "\\begin{tabular}" -- note no carriage return to 
> allow  space for the column preamble
>         set the aftertext to ¬
>             indent & indent & bottomrule & return & ¬
>             indent & "\\end{tabular}" & return & ¬
>             indent & "\\caption{TableCaption}" & return & ¬
>             indent & "\\label{tab:label}" & return & ¬
>             "\\end{table}"
>     else
>         set the beforetext to ¬
>             "\\begin{center}" & return & ¬
>             indent & "\\begin{tabular}"
>         set the aftertext to ¬
>             indent & indent & bottomrule & return & ¬
>             indent & "\\end{tabular}" & return & ¬
>             "\\end{center}"
>     end if
>     
>     set the column_preamble to "{@{} c"
>     set the one_row_text to indent & indent & cell_text
>     
>     if NCOLS > 1 then
>         repeat with c from 2 to NCOLS
>             set the column_preamble to column_preamble & "c"
>             set the one_row_text to one_row_text & "& " & cell_text
>         end repeat
>     end if
>     
>     set the column_preamble to column_preamble & " @{}}" & return
>     set the one_row_text to one_row_text & "\\\\ "
>     
>     -- start off with a header row between two rules:
>     set the midtext to ¬
>         indent & indent & toprule & return & ¬
>         one_row_text & return & ¬
>         indent & indent & midrule & return
>     
>     repeat with r from 1 to NROWS
>         set the midtext to midtext & one_row_text & return
>     end repeat
>     
>     set alltext to beforetext & column_preamble & midtext & aftertext
>     
>     tell application "TeXShop" to set the content of the selection of  
> the front document to alltext
>     
> end tell
> End New Tabular------------------
> New Array----------------------
> --Applescript direct
>
> -- CUSTOMISE TO YOUR LIKING:
> property indent : "  " -- edit this if you want other than 2 spaces  
> for your indent
> property cell_text : "• " -- edit this if you want a different text blob
>
> tell application "TeXShop"
>     set q2 to display dialog "New maths array." & return & return &  
> "Enter the number of rows you'd like." default answer "3"
>     set NROWS to the text returned of q2
>     
>     set q1 to display dialog "How many columns would you like? Would 
> you  like me to indent the array?" default answer "3" buttons 
> {"Cancel",  "Indent", "Flush left"} default button "Flush left"
>     set NCOLS to the text returned of q1
>     set indentyesno to the button returned of q1
>     
>     if the indentyesno = "Indent" then
>         set the preindent to indent
>     else
>         set the preindent to ""
>     end if
>     
>     set the column_preamble to "{c"
>     set the one_row_text to preindent & indent & cell_text
>     
>     if NCOLS > 1 then
>         repeat with c from 2 to NCOLS
>             set the column_preamble to column_preamble & "c"
>             set the one_row_text to one_row_text & "& " & cell_text
>         end repeat
>     end if
>     
>     set the column_preamble to column_preamble & "}" & return
>     set the one_row_text to one_row_text & "\\\\ " & return
>     
>     set midtext to ""
>     repeat with r from 1 to NROWS
>         set the midtext to midtext & one_row_text
>     end repeat
>     
>     set the beforetext to preindent & "\\begin{array}"
>     set the aftertext to preindent & "\\end{array}"
>     
>     set alltext to beforetext & column_preamble & midtext & aftertext
>     
>     tell application "TeXShop" to set the content of the selection of  
> the front document to alltext
> end tell
> End New Array---------------------
> New Column----------------------
> --Applescript direct
>
> -- CUSTOMISE AS YOU LIKE:
> property indent : "  "
> property default_button : "After" -- or "Before"
> property cell_blob : "•"
>
> --BEGIN:
>
> tell application "TeXShop"
>     set q to display dialog "This macro adds a new column to the  
> selected tabular. Please enter the column number before or after  
> which you would like to add a new column." default answer "1" buttons  
> {"Before", "After"} default button default_button
>     
>     set add_where to the button returned of q
>     set col_num to the text returned of q
>     
>     tell application "TeXShop" to set tabular to the content of the  
> selection of the front document
>     
>     set new_tabular to ""
>     repeat with ii from 1 to the count of the paragraphs of tabular
>        
>         set this_line to paragraph ii of tabular
>        
>         if this_line contains "\\\\" and this_line does not contain "\ 
> \multicolumn" then
>            
>             --Transform "    a & b & c \\" to "a & b & c":
>             set trim_line to do shell script ¬
>                 "echo " & the quoted form of this_line & ¬
>                 " | sed 's/^[ ^t]*//' | sed 's/\\\\\\\\//'"
>             -- "\\\\\\\\" is a TeX newline escaped in both Applescript 
> and the  shell
>            
>            
>             set new_col to "& " & cell_blob & " &"
>             if add_where = "After" then
>                 set line_start to do shell script "echo " & the quoted 
> form of  trim_line & " | cut -f -" & col_num & " -d '&'"
>                 set line_end to do shell script "echo " & the quoted 
> form of  trim_line & " | cut -f " & col_num + 1 & "- -d '&'"
>                 if line_end = "" then
>                     set new_col to "& " & cell_blob & " "
>                 end if
>             else if add_where = "Before" then
>                 if col_num = "1" then
>                     set line_start to ""
>                     set new_col to cell_blob & " & "
>                     set line_end to trim_line
>                 else
>                     set line_start to do shell script "echo " & the 
> quoted form of  trim_line & " | cut -f -" & col_num - 1 & " -d '&'"
>                     set line_end to do shell script "echo " & the 
> quoted form of  trim_line & " | cut -f " & col_num & "- -d '&'"
>                     if line_end = "" then
>                         set new_col to "& " & cell_blob & " "
>                     end if
>                 end if
>             end if
>            
>             set new_line to indent & indent & line_start & new_col & 
> line_end  & "\\\\"
>             if new_tabular = "" then
>                 set new_tabular to new_line
>             else
>                 set new_tabular to new_tabular & return & new_line
>             end if
>         else
>             if new_tabular = "" then
>                 set new_tabular to this_line
>             else
>                 set new_tabular to new_tabular & return & this_line
>             end if
>         end if
>        
>     end repeat
>     
>     if tabular contains "\\multicolumn" then
>         display dialog "I cannot parse lines with “\\multicolumn” in 
> them.  You'll have to do them by hand. Sorry." buttons {"Cancel", 
> "Proceed"}  default button "Proceed" with icon caution
>     end if
>     
>     tell application "TeXShop" to set the selection of the front  
> document to new_tabular
>     
>     display dialog "Don't forget to change the column header!" 
> buttons  {"•"} giving up after 4
>     
> end tell
> End New Column----------------
> Delete Column-----------------
> --Applescript direct
>
> property indent : "  "
>
> --BEGIN:
> tell application "TeXShop"
>     
>     set tabular to the content of the selection of the front document
>     
>     if tabular = "" then
>         display dialog "Nothing selected. Please select the 
> tabular/array  rows you wish to edit." buttons "Cancel" default button 1
>     end if
>     
>     set q to display dialog "Please enter the number of the column 
> you  would like to delete." default answer "1" buttons {"Cancel",  
> "Delete"} default button "Delete"
>     
>     set col_num to the text returned of q
>     
>     
>     set sample_value to ""
>     set new_tabular to ""
>     repeat with ii from 1 to the count of the paragraphs of tabular
>        
>         set this_line to paragraph ii of tabular
>        
>         if this_line contains "\\\\" and this_line does not contain "\ 
> \multicolumn" then
>             -- note "\\\\" means \\ because the backslashes are escaped
>            
>             --Transform "    a & b & c \\" to "a & b & c":
>             set trim_line to do shell script ¬
>                 "echo " & the quoted form of this_line & ¬
>                 " | sed 's/^[ ^t]*//' | sed 's/\\\\\\\\//'"
>             -- "\\\\\\\\" is a TeX newline escaped in both Applescript 
> and the  shell
>            
>             set new_col to "&"
>             if sample_value = "" then
>                 set sample_value to do shell script "echo " & the 
> quoted form of  trim_line & " | cut -f " & col_num & "-" & col_num & " 
> -d '&'"
>             end if
>             if col_num = "1" then
>                 set line_start to ""
>                 set line_end to do shell script "echo " & the quoted 
> form of  trim_line & " | cut -f " & col_num + 1 & "- -d '&'"
>                 set new_col to ""
>             else
>                 set line_start to do shell script "echo " & the quoted 
> form of  trim_line & " | cut -f -" & col_num - 1 & " -d '&'"
>                 set line_end to do shell script "echo " & the quoted 
> form of  trim_line & " | cut -f " & col_num + 1 & "- -d '&'"
>                 if line_end = "" then
>                     set new_col to ""
>                 end if
>             end if
>            
>            
>             set new_line to indent & indent & line_start & new_col & 
> line_end  & "\\\\"
>             if new_tabular = "" then
>                 set new_tabular to new_line
>             else
>                 set new_tabular to new_tabular & return & new_line
>             end if
>         else
>             if new_tabular = "" then
>                 set new_tabular to this_line
>             else
>                 set new_tabular to new_tabular & return & this_line
>             end if
>         end if
>        
>     end repeat
>     
>     display dialog "Are you sure you want to delete the column that  
> begins with “" & sample_value & "”?" buttons {"Cancel", "Delete"}  
> default button "Delete"
>     
>     if tabular contains "\\multicolumn" then
>         display dialog "I cannot parse lines with “\\multicolumn” in 
> them.  You'll have to do them by hand. Sorry." buttons {"Cancel", 
> "Proceed"}  default button "Proceed" with icon caution
>     end if
>     
>     tell application "TeXShop" to set the selection of the front  
> document to new_tabular
>     
>     display dialog "Don't forget to delete columns from the column  
> header!" buttons {"•"} giving up after 4
>     
> end tell
> End Delete Column-------------------
>
> Will the person who wrote these macros please sand up! :-)
> Hope I have permission to put them in this message.

I thought I remembered having seen or read about them but couldn't find 
them so I had assumed something along the line of wishful tinking.

If if everybody muds down, I will try tonight.
If somebody sands up, I will try Goedde's solution—with NeoOffice of 
course.
In no case shall I even think of trying regex as I am truly afraid of 
these things.

Grateful regards to Goedde, Schulz and Munn.
--schremmer

------------------------- Helpful Info -------------------------
Mac-TeX Website: http://www.esm.psu.edu/mac-tex/
TeX FAQ: http://www.tex.ac.uk/faq
List Archive: http://tug.org/pipermail/macostex-archives/
List Reminders & Etiquette: http://www.esm.psu.edu/mac-tex/list/





More information about the macostex-archives mailing list