2

Как создать расширенную матрицу в редакторе уравнений Word 2007+ (2010)?

Как это.

Является ли это возможным?

3 ответа3

2

Я думаю, что вы можете сделать это таким образом ...

  1. Вставьте уравнение.
  2. В раскрывающемся списке «Кронштейн» вставьте первый элемент из группы «Кронштейн с разделителями».
  3. Выберите первое из двух полей
  4. Из раскрывающегося списка Матрица вставьте пустую матрицу 3x3
  5. Щелкните правой кнопкой мыши матрицу и используйте параметр «Вставка» для вставки столбцов и строк при необходимости.
  6. Выберите второй из двух оригинальных полей
  7. В раскрывающемся списке «Матрица» вставьте пустую матрицу 3x1, а затем добавьте строки при необходимости.

Это приводит к разделителю, который довольно близок к двум матрицам. Чтобы добавить дополнительное пространство, после шага (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 состоит в том, чтобы создать "Математическую строку", например:

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

Или вы можете использовать жетоны "математического автозамены" \matrix и т.д. Вместо специальных символов Unicode, как это. Функция 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, разделенными разделителем. В общем, переключение на встроенное дает вам возможность возиться с кодом, который генерирует объект уравнения.

0

Это работало для меня как в Word, так и в OneNote.

Введите [|] и пробел в редакторе уравнений. Теперь у вас будет два заполнителя рядом с | где вы можете вставить две матрицы без скобок (с панели инструментов). После того, как вы вставили две матрицы, вы можете вставить пробелы до и после | чтобы сделать его более читабельным.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .