Word 2007+(2010)方程式エディターで拡大行列を作成するにはどうすればよいですか?
出来ますか?
私はあなたがこのようにそれをすることができると思います...
これにより、2つの行列に非常に近いセパレータが作成されます。スペースを追加するには、手順(4)の後にスペースを入力し、手順6の前にスペースを挿入します。それが良い方法かどうかはわかりません。
このようなものを使用してVBAでそれを行うことができます。このようなものは私にとってまったく新しいものなので、間違いなく改善することができます。少数の配列サイズで定期的に作業している場合は、VBAを使用して各配列を生成し、それをビルディングブロック/オートテキストとして保存することを検討できます。
Sub testInsertAugmentedMatrix1()
' Insert a test equation at the selection point
Call insertAugmentedMatrix1(Selection.Range, 2, 5)
End Sub
Sub insertAugmentedMatrix1(rng As Word.Range, RowCount As Integer, ColumnCount As Integer)
' Insert a "basic" augmented matrix at the specified range,
' with RowCount rows, ColumnCount columns, and a single column after the separator
Dim mainFunction As Word.OMathFunction
Dim subFunction As Word.OMathFunction
' Insert the framework
rng.OMaths.Add rng
With rng.OMaths(1)
Set mainFunction = .Functions.Add(.Range, wdOMathFunctionDelim, 2)
With mainFunction
.Delim.BegChar = 40
.Delim.SepChar = 124
.Delim.EndChar = 41
.Delim.Grow = True
.Delim.Shape = wdOMathShapeCentered
End With
With mainFunction.Args(1)
Set subFunction = .Functions.Add(.Range, wdOMathFunctionMat, ColumnCount * RowCount, ColumnCount)
subFunction.Range.InsertAfter " "
End With
With mainFunction.Args(2)
Set subFunction = .Functions.Add(.Range, wdOMathFunctionMat, RowCount, 1)
subFunction.Range.InsertBefore " "
End With
Set subFunction = Nothing
Set mathFunction = Nothing
End With
End Sub
VBAのもう1つの方法は、次のような「数学文字列」を作成することです。
Sub testInsertAugmentedMatrix2()
' Insert a test equation at the selection point
Call insertAugmentedMatrix2(Selection.Range, 4, 6)
End Sub
Sub insertAugmentedMatrix2(rng As Word.Range, RowCount As Integer, ColumnCount As Integer)
Const mthMatrix As Long = &H25A0 '"Black Square"
Const chrMatrixColumnDelimiter As String = "&"
Const chrMatrixRowDelimiter As String = "@"
Const mthVbar As Long = &H2502
Dim i As Integer
Dim strArray As String
strArray = ""
For i = 1 To RowCount
If i > 1 Then
strArray = strArray & chrMatrixRowDelimiter
End If
strArray = strArray & String(ColumnCount - 1, chrMatrixColumnDelimiter)
Next
rng.Text = "(" & _
ChrW(mthMatrix) & "(" & strArray & ")" & _
" " & ChrW(mthVbar) & " " & _
ChrW(mthMatrix) & "(" & String(RowCount - 1, chrMatrixRowDelimiter) & ")" & _
")"
rng.OMaths.Add rng
rng.OMaths.BuildUp
End Sub
または、このような特別なUnicode文字の代わりに、「数学オートコレクト」トークン\ matrixなどを使用できます。 mathSubstitute関数は ここに私の投稿 からコピーされており、広範囲にテストされていません。これが潜在的に最も読みやすいアプローチだと思います。
Sub testInsertAugmentedMatrix3()
' Insert a test equation at the selection point
Call insertAugmentedMatrix3(Selection.Range, 4, 6)
End Sub
Sub insertAugmentedMatrix3(rng As Word.Range, RowCount As Integer, ColumnCount As Integer)
Const mthMatrix As String = "\matrix"
Const chrMatrixColumnDelimiter As String = "&"
Const chrMatrixRowDelimiter As String = "@"
Const mthVbar As String = "\vbar"
Dim i As Integer
Dim strArray As String
strArray = ""
For i = 1 To RowCount
If i > 1 Then
strArray = strArray & chrMatrixRowDelimiter
End If
strArray = strArray & String(ColumnCount - 1, chrMatrixColumnDelimiter)
Next
rng.Text = mathSubstitute("(" & _
mthMatrix & "(" & strArray & ")" & _
" " & mthVbar & " " & _
mthMatrix & "(" & String(RowCount - 1, chrMatrixRowDelimiter) & ")" & _
")")
rng.OMaths.Add rng
rng.OMaths.BuildUp
End Sub
Function mathSubstitute(s As String) As String
Const bslash As String = "\"
Dim a() As String
Dim sout As String
Dim i As Integer
Dim j As Integer
Dim sac As String
sout = ""
If s <> "" Then
a = Split(s, bslash)
sout = a(LBound(a))
For i = LBound(a) + 1 To UBound(a)
Debug.Print a(i)
For j = 1 To Len(a(i))
On Error Resume Next
sac = Application.OMathAutoCorrect.Entries(bslash & Left(a(i), j)).Value
If Err.Number = 0 Then
sout = sout & sac & Mid(a(i), j + 1)
Exit For
Else
sac = ""
Err.Clear
End If
Next
If sac = "" Then sout = sout & bslash & a(i)
'Debug.Print sout
Next
End If
On Error GoTo 0
mathSubstitute = sout
End Function
マレーサージェントによる論文があります ここ これらすべてのものがどのように機能するかを説明しています。そこにある方程式の番号付けはうまくいかないと思いますWordですが、他の場所ではうまくいくかもしれません。
方程式オブジェクトを作成します。右クリックして、インラインに変更します。以下を貼り付け、右クリックして表示に変更します。
[■(&@&)│■(&@&)]
これにより、2つの2x2パーツが仕切りで区切られた拡大行列が得られます。一般に、インラインに切り替えると、数式オブジェクトを生成するコードをいじくり回すことができます。
これは、WordとOneNoteの両方で機能しました。
数式エディタで[|]とスペースを入力します。これで、|に隣接する2つのプレースホルダーができます。ここで、(ツールバーから)2つのブラケットなしの行列を挿入できます。 2つの行列を挿入した後、|の前後にスペースを挿入できます。読みやすくするためです。