背景:
我想改进我的 matlab 函数mat2lat(A)
:
https://github.com/KasparJohannesSchneider/mat2lat/issues/1
问题:
对于复杂矩阵,对齐模式{c}
看起来不太好,因为实部和虚部之间的 + 和 - 符号没有对齐,见下面的屏幕截图。由于 LaTex 代码是通过编程创建的,因此为符号创建单独的列不会有问题,但是,这会导致此列左侧和右侧出现奇怪的空间,见下面的“丑陋的解决方法”。
问题:
首先,我强烈希望不要包含除 之外的任何包\usepackage{amsmath}
。在 LaTex 中显示复杂矩阵的最佳解决方案是什么?
最小工作示例:
\documentclass[11pt, titlepage, oneside, a4paper]{article}
\usepackage{amsmath}
\begin{document}
\textbf{Works for real matrices:}
$$\left[\begin{array}{ccc}
{64+2.828i} & {1+1i} & {36+2.449i} \\
{9+1.732i} & {25+2.236i} & {49+2.646i} \\
{16+2i} & {81+3i} & {4+1.414i}
\end{array}\right]$$
\textbf{Ugly workaround:}
$$\left[\begin{array}{rclcrclcrcl}
64&+&2.828i && 1&+&1i && 36&+&2.449i \\
9&+&1.732i && 25&+&2.236i && 49&+&2.646i \\
16&+&2i && 81&+&3i && 4&+&1.414i
\end{array}\right]$$
\end{document}
答案1
如果无法加载其他包,则必须\medmuskip
手动在二元运算符周围添加正确的
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[ % never use $$...$$ in LaTeX: https://tex.stackexchange.com/q/503/82917
\left[
\begin{array}{*{3}{r@{\mskip\medmuskip}c@{\mskip\medmuskip}l}}
64&+&2.828i & 1&+&1i & 36&+&2.449i \\
9&+&1.732i & 25&+&2.236i & 49&+&2.646i \\
16&+&2i & 81&+&3i & 4&+&1.414i
\end{array}
\right]
\]
\end{document}
答案2
为什么不简单地aligned
在里面放三个环境呢\bmatrix
?
不相关:对于显示的方程式,使用 latex 构造\[ ... \]
,注意纯 TeX $$ ... $$
。
\documentclass[11pt, titlepage, oneside, a4paper]{article}
\usepackage{amsmath}
\begin{document}
\[ \begin{bmatrix}
\, \begin{aligned}
64&+2.828i \\ 9&+1.732i \\ 16&+2i
\end{aligned}
& \begin{aligned}
1&+1i \\ 25&+2.236i \\ 81&+3i
\end{aligned}
& \begin{aligned}
36&+ 2.449i \\ 49&+ 2.646i \\ 4 & + 1.414i
\end{aligned}\,
\end{bmatrix} \]
\end{document}
答案3
如果您愿意使用其他一些软件包,您可以捕获新定义的列中每个单元格的参数(比如说)I
,然后进行处理(分离出实部/虚部):
\documentclass{article}
\usepackage{amsmath,eqparbox,collcell,etoolbox}
\newcolumntype{I}{>{\collectcell\RpmI}c<{\endcollectcell}}
\makeatletter
\def\rplusi@#1+#2\relax{% R + Ii
\eqmakebox[R][r]{$#1$} + \eqmakebox[I][l]{$#2$}%
}
\def\rminusi@#1-#2\relax{% R - Ii
\eqmakebox[R][r]{$#1$} - \eqmakebox[I][l]{$#2$}%
}
\newcommand{\RpmI}[1]{%
\def\abc{#1}% Store argument R +/- Ii
\patchcmd{\abc}{+}{+}{%
\expandafter\rplusi@#1\relax% R + Ii
}{%
\expandafter\rminusi@#1\relax% R - Ii
}%
}
\makeatother
\begin{document}
\textbf{Works for real matrices:}
\[
\left[\begin{array}{ccc}
64 - 2.828i & 1 + 1i & 36 - 2.449i \\
9 + 1.732i & 25 - 2.236i & 49 + 2.646i \\
16 - 2i & 81 + 3i & 4 - 1.414i
\end{array}\right]
\]
\textbf{Workaround:}
\[
\left[\begin{array}{III}
64 - 2.828i & 1 + 1i & 36 - 2.449i \\
9 + 1.732i & 25 - 2.236i & 49 + 2.646i \\
16 - 2i & 81 + 3i & 4 - 1.414i
\end{array}\right]
\]
\end{document}