复杂矩阵的列对齐符号

复杂矩阵的列对齐符号

背景:

我想改进我的 matlab 函数mat2lat(A)

https://github.com/KasparJohannesSchneider/mat2lat/issues/1

问题:

对于复杂矩阵,对齐模式{c}看起来不太好,因为实部和虚部之间的 + 和 - 符号没有对齐,见下面的屏幕截图。由于 LaTex 代码是通过编程创建的,因此为符号创建单独的列不会有问题,但是,这会导致此列左侧和右侧出现奇怪的空间,见下面的“丑陋的解决方法”。

下面是 MWE 的输出

问题:

首先,我强烈希望不要包含除 之外的任何包\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}

相关内容