web-dev-qa-db-ja.com

Word 2007+数式エディタで拡大行列を作成するにはどうすればよいですか?

Word 2007+(2010)方程式エディターで拡大行列を作成するにはどうすればよいですか?

Like this.

出来ますか?

3
AlexP11223

私はあなたがこのようにそれをすることができると思います...

  1. 方程式を挿入します。
  2. [ブラケット]ドロップダウンから、[セパレータ付きブラケット]グループの最初のアイテムを挿入します
  3. 2つのボックスの最初のボックスを選択します
  4. [マトリックス]ドロップダウンから、3x3の空のマトリックスを挿入します
  5. マトリックスを右クリックし、[挿入]オプションを使用して、必要に応じて列と行を挿入します
  6. 元の2つのボックスの2番目を選択します
  7. [マトリックス]ドロップダウンから、3x1の空行列を挿入し、必要に応じて行を追加します。

これにより、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ですが、他の場所ではうまくいくかもしれません。

3
user181946

方程式オブジェクトを作成します。右クリックして、インラインに変更します。以下を貼り付け、右クリックして表示に変更します。

[■(&@&)│■(&@&)]

これにより、2つの2x2パーツが仕切りで区切られた拡大行列が得られます。一般に、インラインに切り替えると、数式オブジェクトを生成するコードをいじくり回すことができます。

4
Paul

これは、WordとOneNoteの両方で機能しました。

数式エディタで[|]とスペースを入力します。これで、|に隣接する2つのプレースホルダーができます。ここで、(ツールバーから)2つのブラケットなしの行列を挿入できます。 2つの行列を挿入した後、|の前後にスペースを挿入できます。読みやすくするためです。

1
Jannie Gerber