증강 행렬에 대한 이 매크로는 어떻게 작동합니까?

증강 행렬에 대한 이 매크로는 어떻게 작동합니까?

나는 말 그대로 수백 개의 증강 행렬을 조판하기 위해 어딘가에서 찾은 이 코드를 사용했는데 정말 놀라웠습니다.

\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 기술은 음, 아직 초보입니다. 하지만 최선을 다해 배우고 있어요.

그러나 위와 같이 재정의된 행렬 명령이 어떻게 작동하는지 정확히 파악하는 데 어려움을 겪고 있습니다. 내 추측은 다음과 같습니다. 제 의견을 수정하거나 부족한 부분을 채워주실 수 있나요?

  1. \makeatletter: @기본적으로 문자에는 특별한 의미가 수반되며 이 명령은 일시적으로 해당 특별한 의미를 제거합니다.
  2. \renewcommand*: 기존 매크로를 재정의하기 위한 것입니다. 여기에 별표가 표시된 변형은 매크로를 사용할 때 여러 단락( \n\n또는 ) 이 실수로 포함되는 것을 방지합니다 .\par
  3. \env@matrix: 아마도 이것이 우리가 갱신하고 있는 명령일 것입니다. 어딘가에 정의되어 있습니까 amsmath? 정말 @이름에 기호가 있나요 ?
  4. [1]: 이는 새로 갱신된 명령이 하나의 선택적 인수를 취함을 의미합니다.
  5. [*\c@MaxMatrixCols c]*: 이 시작 부분의 가 무엇을 하는지 모르겠습니다 . \c(afaik)은 세디야를 하기 위한 것이지만 여기에는 적합하지 않은 것 같습니다. MaxMatrixCols변수는 amsmath기본적으로 10으로 정의되어 있습니다. 여기서 이를 사용하여 계산을 수행하고 있습니까? 아니면 다시 설정하나요? 또는 무엇을? 결승전 c은 나도 잘 모르겠다. 사실, 이 전체 구조는 무엇입니까? 선택적 매개변수에 대한 패턴 일치인가요?
  6. {%: 여기서 주석을 영리하게 사용하는 것은 아마도 개행 문자를 무시하는 것입니다. 그러나 그것이 없으면 간격에 아무런 차이가 없습니다.
  7. \hskip -\arraycolsep: 이것은 양만큼의 백스페이스입니다.\arraycolsep
  8. \let\@ifnextchar\new@ifnextchar: 이것은 명령을 섀도잉하는 \@ifnextchar것인데 왜 그렇습니까? 둘 다 \@ifnextchar또는 \new@ifnextchar사용되지 않는 것 같습니다.
  9. \array{#1}}: 원시 배열을 삽입하고 매개변수를 전달합니다. #1여기에 선택적 [ccc:c]사양이 언급되어 있는지 아니면 매트릭스의 실제 내용이 언급되어 있는지 잘 모르겠습니다 .
  10. \makeatother: 이것은 아마도 @기호를 정상 상태로 되돌릴 것입니다.

답변1

아직 의 사용법이 익숙하지 않다면 \renewcommand코드를 이해하기 위해 더 많은 것을 배워야 할 수도 있습니다.

  1. \makeatletter: @문자로 만들어서 매크로 이름으로 사용할 수 있습니다. 보다\makeatletter와 \makeatother는 무엇을 하나요?
  2. 아시다시피.
  3. amsmath의 문서화된 소스 코드를 읽어 보십시오 amsmath.pdf(컴파일하여 생성됨 amsmath.dtx). 이는 일련의 매트릭스 환경( matrix, bmatrix, pmatrix등) 의 시작입니다.
  4. 하나의 주장. 인수가 선택 사항인지 아닌지는 현재로서는 실제로 알 수 없습니다.
  5. [...]after [1](또는 [2], [3])는 첫 번째 인수는 선택 사항이며 기본값을 지정함을 의미합니다.

    \c@MaxMatrixCols는 와 동일합니다 \value{MaxMatrixCols}. 여기서 MaxMatrixCols는 카운터에 정의되어 있습니다 amsmath(기본값은 10).

    * \c@MaxMatrixCols c의 인수로 사용되며 \array다음과 동일합니다.

    \begin{array}{*{10}{c}}
    
  6. 아시다시피.
  7. 아시다시피. 의 추가 공간은 환경 \arraycolsep에 의해 생성됩니다 . 내가 쓴다면 이것을 대신 사용할 것입니다 .\arrayarray\begin{@{}*{10}{c}@{}}
  8. \new@ifnextcharamsgen.sty에 의해 로드됨에 정의되어 있습니다 amsmath. 읽기문서화된 소스 코드.
  9. \array환경 의 시작입니다 array. 개별 매트릭스 환경은 결국 \endarray.
  10. 위 참조.

관련 정보