
我使用了我在某處找到的這段程式碼來排版數百個增強矩陣,這真是太神奇了:
\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 技能還處於初級階段。但我正在盡力學習。
但是,我很難弄清楚上面重新定義的矩陣命令是如何運作的。這是我最好的猜測。你能糾正我和/或填補空白嗎?
\makeatletter
:@
預設情況下該字元具有某些特殊意義,該指令暫時刪除該特殊意義。\renewcommand*
:這是為了重新定義現有的巨集。此處帶有星號的變體可防止使用巨集時意外包含多個段落(\n\n
或)。\par
\env@matrix
:這大概是我們要更新的命令。它是在某處定義的嗎amsmath
?@
它的名字裡真的有符號嗎?[1]
:這意味著新更新的命令需要一個可選參數。[*\c@MaxMatrixCols c]
: 我不知道*
這個開頭的作用是什麼。\c
(afaik) 用來做變音符號,但這似乎不適合這裡。是一個預設MaxMatrixCols
定義為 10 的變量,我們在這裡用它做一些數學計算嗎?amsmath
還是重新設定一下?或者是什麼?最後的結果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
- 一論。目前實際上尚不清楚該參數是否是可選的。
[...]
after[1]
(or[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
.- 往上看。