
どこかで見つけたこのコードを使って、文字通り何百もの拡張行列をタイプセットしてみましたが、驚くべき結果になりました。
\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]
: これは、新しく更新されたコマンドが 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 つです。引数がオプションであるかどうかは、現時点では不明です。
[...]
after[1]
(または[2]
、[3]
) は、最初の引数がオプションであり、デフォルト値を指定することを意味します。\c@MaxMatrixCols
は と同じです\value{MaxMatrixCols}
。ここで はMaxMatrixCols
で定義されたカウンタですamsmath
(デフォルトは 10)。* \c@MaxMatrixCols c
の引数として使用される場合\array
は、\begin{array}{*{10}{c}}
- あなたが知っているように。
- ご存知のとおり、 の余分なスペースはie環境
\arraycolsep
によって生成されます。私が書く場合は、代わりにを使用します。\array
array
\begin{@{}*{10}{c}@{}}
\new@ifnextchar
amsgen.sty
は によってロードされで定義されていますamsmath
。文書化されたソースコード。\array
は環境の始まりですarray
。個々の行列環境は最終的に を呼び出すことに注意してください\endarray
。- 上記を参照。