[OS X TeX] Insert a column
Herbert Schulz
herbs at wideopenwest.com
Thu Dec 21 14:14:16 EST 2006
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.
Good Luck,
Herb Schulz
(herbs at wideopenwest.com)
------------------------- 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 MacOSX-TeX
mailing list