将一组数学表达式以矩阵形式排列,具有任意数量的列

将一组数学表达式以矩阵形式排列,具有任意数量的列

我利用环境整理了一组数学表达式align。例如,

\begin{flalign*}
u_{(1.1)0}^0 &= 0;          &u_{(2.1)0}^0 &=  - 2;          &u_{(2.2)0}^0 &= 2;      &u_{(3.1)0}^0 &=  - 1;         &u_{(3.2)0}^0 &=  - 1;      &u_{(4.1)0}^0 &= 0\\
u_{(1.1)\xi }^0 &=  - 2;        &u_{(2.1)\xi }^0 &= 2;      &u_{(2.2)\xi }^0 &= 2;  &u_{(3.1)\xi }^0 &= 3;      &u_{(3.2)\xi }^0 &=  - 3;   &u_{(4.1)\xi }^0 &= 4
\end{flalign*}

对于不同的页面设置,有时这些方程式会导致打印区域溢出。

  • 是否存在一种简单的算法可以打印具有任意列数的这些方程式?

編輯-1 对示例稍作修改,使问题变得优雅。

   \begin{alignat*}{3}
      a&=fffffffffffffffffffffffff; &b&=gbbbbbbbbbbbbbbbbbbb; &c&=aaaaaaaaaaaaaaaaaaaaaa; \\
      d&=ggggggggggggggggggggggggg; &f&=tttttttttttttttttttt; &t&=ssssssssssssssssssssss;
  \end{alignat*}

使用上述代码(以及align)生成的输出如下所示。

在此处输入图片描述 由于无法打印边距之外的表达式,因此迫使用户将表达式重新对齐到 2 列(这里 2 是由用户根据个案任意选择)。

因此,给定一组表达式,是否存在一种算法或一些代码,可以在无需任何干预的情况下在用户给出的列数内打印对齐的表达式。

編輯-2 在网上稍微搜索了一下,参考了一些评论,问题稍微解决了。

\newcounter{i}
\setcounter{i}{-1}
\newcount\col
\col=3
\foreach \ele in {1,2,3,...,15}
 {
  \ifnum \thei <\col
  {
   \ele\,
   \addtocounter{i}{1}
  }
  \else
 {
    \setcounter{i}{0}
    \\ \ele\,
 } \fi
}

通过上述代码,输出的是矩阵形式,如下所示。

在此处输入图片描述

編輯-3

在搜索主题时,我找到了一些关于如何存储字符串的答案。这个想法是:定义一个接受字符串的命令。在运行循环时,使用新字符串重新定义字符串命令。获得最终字符串后,在所需环境中使用该字符串,并将字符串命令重置为第一个。

我不确定这是否是正确的做法并且是否有效。


PS:这样的情况有很多,而且很难为每个页面设置安排这些情况!

答案1

使用没有编号方程alignat的环境添加我的 MWE 。amsmath

\documentclass[a4paper,12pt]{article}
\usepackage{amsmath,amssymb}
\begin{document}
\begin{alignat*}{6}
    u_{(1.1)0}^0 &= 0;\quad  &u_{(2.1)0}^0 &=  - 2;\quad  &u_{(2.2)0}^0 &= 2;\quad  &u_{(3.1)0}^0 &=  - 1;\quad &u_{(3.2)0}^0 &=  - 1;\quad  &u_{(4.1)0}^0 &= 0\\
     u_{(1.1)\xi}^0 &= -2;\quad  &u_{(2.1)\xi}^0&= 
     2;\quad  &u_{(2.2)\xi }^0  &= 2;\quad  &u_{(3.1)\xi}^0&=  3;\quad &u_{(3.2)\xi}^0  &=  - 3;\quad  &u_{(4.1)\xi}^0 &= 4
\end{alignat*}
\end{document}

在此处输入图片描述

..通过geometry包,您就得到了正确编号的方程式。

\documentclass[a4paper,12pt]{article}
\usepackage{amsmath,amssymb}
\usepackage[margin=2cm]{geometry}
\begin{document}
\begin{alignat}{6}
    u_{(1.1)0}^0 &= 0;\quad  &u_{(2.1)0}^0 &=  - 2;\quad  &u_{(2.2)0}^0 &= 2;\quad  &u_{(3.1)0}^0 &=  - 1;\quad &u_{(3.2)0}^0 &=  - 1;\quad  &u_{(4.1)0}^0 &= 0\\
     u_{(1.1)\xi}^0 &= -2;\quad  &u_{(2.1)\xi}^0&= 
     2;\quad  &u_{(2.2)\xi }^0  &= 2;\quad  &u_{(3.1)\xi}^0&=  3;\quad &u_{(3.2)\xi}^0  &=  - 3;\quad  &u_{(4.1)\xi}^0 &= 4
\end{alignat}
\end{document}

在此处输入图片描述

答案2

在偶然寻找其他东西时,我遇到了两个比预期简单得多的解决方案。

解决方案:1 可以使用multicol包。从包的文档中。工作模型是

\documentclass[a4paper,12pt]{article}
\usepackage{multicol}
\begin{document}
\begin{multicols}{3}
\noindent $u_{1.1 0}^0=-2;$\\
$u_{1.2 0}^0= 0;$\\
$u_{1.3 0}^0=2;$\\
\columnbreak
$u_{2.1 0}^0= 0$\\
$u_{3.1 0}^0=3;$\\ 
$u_{3.2 0}^0=-1;$\\
$u_{3.3 0}^0=-1;$\\
$u_{3.4 0}^0=3$\\
$u_{4.1 0}^0=-1;$\\
$u_{4.2 0}^0=-1;$\\
\end{multicols}
\end{document}

示例输出为 在此处输入图片描述 columnbreak可用于在所需位置中断列。据观察,有时需要根据行为进行一些实验。

解决方案:2 项目中multicol是垂直排列的。如果想水平排列,可以使用包tasks。详细信息可以参见 水平对齐

相关内容