
나는 말 그대로 수백 개의 증강 행렬을 조판하기 위해 어딘가에서 찾은 이 코드를 사용했는데 정말 놀라웠습니다.
\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
변수는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
등) 의 시작입니다.- 하나의 주장. 인수가 선택 사항인지 아닌지는 현재로서는 실제로 알 수 없습니다.
[...]
after[1]
(또는[2]
,[3]
)는 첫 번째 인수는 선택 사항이며 기본값을 지정함을 의미합니다.\c@MaxMatrixCols
는 와 동일합니다\value{MaxMatrixCols}
. 여기서MaxMatrixCols
는 카운터에 정의되어 있습니다amsmath
(기본값은 10).* \c@MaxMatrixCols c
의 인수로 사용되며\array
다음과 동일합니다.\begin{array}{*{10}{c}}
- 아시다시피.
- 아시다시피. 의 추가 공간은 환경
\arraycolsep
에 의해 생성됩니다 . 내가 쓴다면 이것을 대신 사용할 것입니다 .\array
array
\begin{@{}*{10}{c}@{}}
\new@ifnextchar
amsgen.sty
에 의해 로드됨에 정의되어 있습니다amsmath
. 읽기문서화된 소스 코드.\array
환경 의 시작입니다array
. 개별 매트릭스 환경은 결국\endarray
.- 위 참조.