I have been copying and pasting tables and equations in MS-Word for far too long. At last I have written some word macros to speed things up, so I can more easily produce correctly aligned equations like
and
I also wrote macros to create left / centre / right justified equations using font size 12 instead of 10 which MS always uses and I find too small.
So I now have a "Quick access toolbar" like this
After the AB icon, they have the following effects
The macros are in WordBasic not VBA which is a bit amateurish, but WordBasic is what the Word macro recorder writes.
If you would like to use these macros click Read more and copy and paste them into the Word Visual Basic editor on the Developer tab.
The version in Read more might be out of date. I am fairly diligent about keeping back up versions here.
'Macros to help with equation editing
'By George Keeling and on my blog at https://spacetime-and-geometry.blogspot.com/
'Please feel free to use, copy and give away.
'Version2 14/10/83 tidied up a bit and got 2 of 3 equations inserting correctly!
'Added vertical alignment
'Version 3 25/10/2018 Introduced EquationFontSize
'TO FIX
'InsertEquationL gets incorrect font!
'Inserting second equation in EquationTable3() does not work
Const EquationFontSize = 12 '**** Change this if you prefer another equation font size
Sub InsertEquationL()
'Insert left justified equation with font EquationFont
'Sadly this cannot be called from inside the table creation Macros, because the font comes out wrong
Dim SaveFontSize
SaveFontSize = Selection.Font.Size
Selection.Font.Size = EquationFontSize
WordBasic.EquationEdit
Selection.TypeText Text:="="
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Font.Size = EquationFontSize
'Quite often the attempt to justify the equation fails!
On Error Resume Next
Selection.OMaths(1).ParentOMath.Justification = wdOMathJcLeft
Selection.Font.Size = SaveFontSize
End Sub
Sub CreateTable(Columns As Integer)
'Create table with Columns (Columns = 2 or 3) columns
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:= _
Columns, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
With Selection.Tables(1)
If .Style <> "Table Grid" Then
.Style = "Table Grid"
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = False
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = False
.ApplyStyleRowBands = True
.ApplyStyleColumnBands = False
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
End With
End Sub
Sub EquationTable2()
' Create a table with 2 columns suitable for equations of form
' x = sin a / cos a (9)
' x = tan a (10)
Dim SaveFontSize
SaveFontSize = Selection.Font.Size
CreateTable (2)
Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Columns.PreferredWidth = CentimetersToPoints(15.6)
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
'Insert equation
Selection.Font.Size = EquationFontSize
WordBasic.EquationEdit
Selection.TypeText Text:="="
'Third cell
Call FinishOff(SaveFontSize)
End Sub
Sub EquationTable3()
' Create a table with 3 columns suitable for equations of form
' x = sin a / cos a (9)
' = tan a (10)
Dim SaveFontSize
SaveFontSize = Selection.Font.Size
CreateTable (3)
'In first cell
Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(3.38)
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
'Insert right justified equation
Selection.Font.Size = EquationFontSize
WordBasic.EquationEdit
Selection.TypeText Text:="x"
Selection.OMaths(1).ParentOMath.Justification = wdOMathJcRight
'Second cell
Selection.Move Unit:=wdColumn, Count:=1
Selection.SelectColumn
Selection.Columns.PreferredWidthType = wdPreferredWidthPoints
Selection.Columns.PreferredWidth = CentimetersToPoints(11.62)
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
'Insert left justified equation - For some reason this does not work! :-(
'The equation is not created
' Selection.Font.Size = EquationFontSize
' WordBasic.EquationEdit
' Selection.TypeText Text:="="
' Selection.OMaths(1).ParentOMath.Justification = wdOMathJcLeft
'Third cell
Call FinishOff(SaveFontSize)
End Sub
Sub FinishOff(FontSize)
'Do the last column which contains formula number. We start at second last column
'Also vertically align central (useful if formula gets tall with fractions or matrices etc)
Selection.Move Unit:=wdColumn, Count:=1
Selection.SelectColumn
Selection.Font.Size = FontSize
Selection.Columns.PreferredWidthType = wdPreferredWidthPoints
Selection.Columns.PreferredWidth = CentimetersToPoints(1.38)
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Selection.TypeText Text:="(xx)"
Selection.Tables(1).Select
Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
End Sub
Fig 1: Aligning equation numbers neatly using 2 x 1 tables |
Fig: LHS of equations unchanged and aligning equation numbers |
So I now have a "Quick access toolbar" like this
After the AB icon, they have the following effects
- Select table
- Add bars on table
- Remove bars from table
- Make table a box.
- Insert left justified equation (font size 12)
- Insert unbarred 2 x 1 table with centred justified equation in column 1, (xx) in column 2 (Fig 1)
- Insert unbarred 3 x 1 with right justified equation in column 1, (xx) in column 3 (Fig 2)
The macros are in WordBasic not VBA which is a bit amateurish, but WordBasic is what the Word macro recorder writes.
If you would like to use these macros click Read more and copy and paste them into the Word Visual Basic editor on the Developer tab.
The version in Read more might be out of date. I am fairly diligent about keeping back up versions here.
'Macros to help with equation editing
'By George Keeling and on my blog at https://spacetime-and-geometry.blogspot.com/
'Please feel free to use, copy and give away.
'Version2 14/10/83 tidied up a bit and got 2 of 3 equations inserting correctly!
'Added vertical alignment
'Version 3 25/10/2018 Introduced EquationFontSize
'TO FIX
'InsertEquationL gets incorrect font!
'Inserting second equation in EquationTable3() does not work
Const EquationFontSize = 12 '**** Change this if you prefer another equation font size
Sub InsertEquationL()
'Insert left justified equation with font EquationFont
'Sadly this cannot be called from inside the table creation Macros, because the font comes out wrong
Dim SaveFontSize
SaveFontSize = Selection.Font.Size
Selection.Font.Size = EquationFontSize
WordBasic.EquationEdit
Selection.TypeText Text:="="
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Font.Size = EquationFontSize
'Quite often the attempt to justify the equation fails!
On Error Resume Next
Selection.OMaths(1).ParentOMath.Justification = wdOMathJcLeft
Selection.Font.Size = SaveFontSize
End Sub
Sub CreateTable(Columns As Integer)
'Create table with Columns (Columns = 2 or 3) columns
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:= _
Columns, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
With Selection.Tables(1)
If .Style <> "Table Grid" Then
.Style = "Table Grid"
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = False
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = False
.ApplyStyleRowBands = True
.ApplyStyleColumnBands = False
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
End With
End Sub
Sub EquationTable2()
' Create a table with 2 columns suitable for equations of form
' x = sin a / cos a (9)
' x = tan a (10)
Dim SaveFontSize
SaveFontSize = Selection.Font.Size
CreateTable (2)
Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Columns.PreferredWidth = CentimetersToPoints(15.6)
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
'Insert equation
Selection.Font.Size = EquationFontSize
WordBasic.EquationEdit
Selection.TypeText Text:="="
'Third cell
Call FinishOff(SaveFontSize)
End Sub
Sub EquationTable3()
' Create a table with 3 columns suitable for equations of form
' x = sin a / cos a (9)
' = tan a (10)
Dim SaveFontSize
SaveFontSize = Selection.Font.Size
CreateTable (3)
'In first cell
Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(3.38)
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
'Insert right justified equation
Selection.Font.Size = EquationFontSize
WordBasic.EquationEdit
Selection.TypeText Text:="x"
Selection.OMaths(1).ParentOMath.Justification = wdOMathJcRight
'Second cell
Selection.Move Unit:=wdColumn, Count:=1
Selection.SelectColumn
Selection.Columns.PreferredWidthType = wdPreferredWidthPoints
Selection.Columns.PreferredWidth = CentimetersToPoints(11.62)
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
'Insert left justified equation - For some reason this does not work! :-(
'The equation is not created
' Selection.Font.Size = EquationFontSize
' WordBasic.EquationEdit
' Selection.TypeText Text:="="
' Selection.OMaths(1).ParentOMath.Justification = wdOMathJcLeft
'Third cell
Call FinishOff(SaveFontSize)
End Sub
Sub FinishOff(FontSize)
'Do the last column which contains formula number. We start at second last column
'Also vertically align central (useful if formula gets tall with fractions or matrices etc)
Selection.Move Unit:=wdColumn, Count:=1
Selection.SelectColumn
Selection.Font.Size = FontSize
Selection.Columns.PreferredWidthType = wdPreferredWidthPoints
Selection.Columns.PreferredWidth = CentimetersToPoints(1.38)
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Selection.TypeText Text:="(xx)"
Selection.Tables(1).Select
Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
End Sub
No comments:
Post a Comment