
Я использовал этот код, который где-то нашел, чтобы набрать буквально сотни расширенных матриц, и это было потрясающе:
\documentclass[a4paper,12pt]{article}
\usepackage{amsmath}
\usepackage{arydshln}
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\makeatother
\begin{document}
\(\begin{bmatrix}[ccc:c]
1&2&3&0 \\
4&5&6&0 \\
7&8&9&0 \\
\end{bmatrix}\)
\end{document}
Мои навыки TeX и LaTeX, эм, на начальной стадии. Но я стараюсь учиться.
Однако у меня возникли проблемы с тем, чтобы понять, как именно работает команда redefined matrix, как указано выше. Вот моя лучшая догадка. Можете ли вы исправить меня и/или заполнить пробелы?
\makeatletter
:@
Символ по умолчанию имеет особое значение, и эта команда временно снимает это особое значение.\renewcommand*
: Это для переопределения существующего макроса. Звездный вариант здесь предотвращает случайное включение нескольких абзацев (\n\n
или\par
) при использовании макроса.\env@matrix
: Это команда, которую мы обновляем, предположительно. Она где-то определена вamsmath
? Действительно ли@
в ее названии есть символ?[1]
: Это означает, что вновь обновленная команда принимает один необязательный аргумент.[*\c@MaxMatrixCols c]
: Я не знаю, что*
делает в начале этого.\c
(насколько мне известно) для выполнения седилей, но это, кажется, сюда не подходит.MaxMatrixCols
это переменная, определенная в,amsmath
которая по умолчанию равна 10, мы делаем с ней какие-то математические действия? Или переустанавливаем ее? Или что? О финалеc
я тоже понятия не имею. На самом деле, что это за конструкция? Это какое-то сопоставление с образцом для необязательного параметра?{%
: Разумное использование комментария здесь, по-видимому, заключается в игнорировании новой строки. Однако я не вижу никакой разницы в интервалах без него.\hskip -\arraycolsep
: Это возврат на позицию размером\arraycolsep
\let\@ifnextchar\new@ifnextchar
: Это слежение за командой\@ifnextchar
или что-то в этом роде, но зачем? Ни то\@ifnextchar
, ни другое,\new@ifnextchar
похоже, не используются.\array{#1}}
: Это вставляет необработанный массив и передает параметр. Я не уверен,#1
относится ли это к необязательной[ccc:c]
спецификации или к фактическому содержимому матрицы.\makeatother
: Это, предположительно, возвращает@
символ в его нормальное состояние.
решение1
Если вы все еще не знакомы с использованием \renewcommand
, вам может потребоваться больше информации, чтобы понять код.
\makeatletter
: Делает@
буквой, поэтому может использоваться в имени макроса. СмотретьЧто делают \makeatletter и \makeatother?- Как вы знаете.
- Прочитайте документированный исходный код
amsmath
,amsmath.pdf
(полученный путем компиляцииamsmath.dtx
). Это начало набора матричных сред (matrix
,bmatrix
,pmatrix
, и т.д.) - Один аргумент. На данный момент неизвестно, является ли аргумент необязательным или нет.
[...]
после[1]
(или[2]
,[3]
) означает, что первый аргумент является необязательным и указывает значение по умолчанию.\c@MaxMatrixCols
то же самое, что и\value{MaxMatrixCols}
, гдеMaxMatrixCols
— счетчик, определенный вamsmath
(по умолчанию 10).* \c@MaxMatrixCols c
используется как аргумент\array
, это эквивалентно\begin{array}{*{10}{c}}
- Как вы знаете.
- Как вы знаете. Дополнительное пространство
\arraycolsep
создается средой\array
iearray
. Я бы использовал\begin{@{}*{10}{c}@{}}
вместо этого, если бы я это писал. \new@ifnextchar
определяется вamsgen.sty
загруженномamsmath
. Прочитайтедокументированный исходный код.\array
является началомarray
среды. Обратите внимание, что отдельные матричные среды в конечном итоге вызывают\endarray
.- См. выше.