Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

对physicx中一些特性的支持情况 #3

Open
Sophanatprime opened this issue Feb 9, 2023 · 8 comments
Open

对physicx中一些特性的支持情况 #3

Sophanatprime opened this issue Feb 9, 2023 · 8 comments

Comments

@Sophanatprime
Copy link

未来是否考虑支持physicx宏包中的一些特性呢?
比如几个输出矩阵的命令。

@AlphaZTX
Copy link
Owner

AlphaZTX commented Feb 9, 2023

我觉得我们可以合并一些特性,但是有些写法需要讨论一下,比如对称矩阵和反对称矩阵的输入方式。

@Sophanatprime
Copy link
Author

嗯,当时写的时候接口名称没细想。

@AlphaZTX
Copy link
Owner

AlphaZTX commented Apr 8, 2023

这几天突然想到,对称矩阵和反对称矩阵主要可以设置两种输入方式,一种是场论里面常用的各种变换矩阵,这种更适合按行输入;另一种类似于三对角矩阵,更适合按对角线输入。

我觉得我们可以合并一些特性,但是有些写法需要讨论一下,比如对称矩阵和反对称矩阵的输入方式。

@Sophanatprime
Copy link
Author

physicx 是支持使用按行输入、按对角线输入、按位置输入的:

% \usepackage{amsmath, physicx}
\[
  \generalmatrix+{auto-update, p,
    element-code=#1, % 只输出元素,不输出角标
    adi-order=adi, % 先处理按行输入,再处理按对角线输入,再处理按位置输入
    array={1,2,3,4;  ,II,III,IV}, % 按行
    diag={ 0={A,B,C,D} }, % 按对角线
    item={ {2}{2}=\otimes }, % 按位置
  }
\]

image

不过不支持输入一个向量把它转为对角矩阵或者对称矩阵这种。

@Sophanatprime
Copy link
Author

physicx 宏包特性一览:

括号:\xquantity

一个“括号”由8个部分构成:<pre> <left-size> <left> <arg> <text> <right-size> <right> <post>

这8个部分都可以通过同名的键来设置。

<left-size><right-size>\big\Big 这种命令,也可以是非负数,还支持自定义的命令,比如用 \def\Biggg{\bBigg@\thr@@} 定义的 \Biggg 也是支持的。
如果是一个数字的话,1.2 相当于 \bBigg\@ne\big)。

<size> 是同时设置 <left-size><right-size> 的,可以不写键名,只写数字或命令。

<left><right> 不必是一个 token,像 left=\begin{matrix}right=\end{matrix} 也是支持的。

还有几个键,比如 type=p 是圆括号,type=b 是方括号,type=pmpmatrix 环境,等等。
这个键名也可以不写,只写 pbpm 等。

矩阵:\generalmatrix

核心只有这一个宏,其它几个都可以算作是这个宏的特例。

  • rowscols,设置矩阵的大小,有些键使用时需要矩阵大小已知,可以不固定。
  • auto-update,自动更新矩阵的大小,有些键使用时可以控制是否调整矩阵的大小。
  • array,这个键显式给出矩阵的元素。
  • main,这个键把矩阵的每个元素都设置为它的值,比如全为 0。
  • diagdiag+,按对角线设置矩阵的元素,支持主、副对角线和偏移量,如 0={a,b,c}'-1={A,B}
  • itemitem+,按位置设置,如 {1}{2}=A, {2-4,6}{-6}=B。第二个设置 2、3、4、6 行 1-6 列。
  • adi-order,设置 array/maindiagitem 处理的顺序。
  • diag-nowitem-now 立即设置元素。
  • diag-datadiag-data 使用保存的数据。
  • check-range,当使用 item 设置元素时,如果位置不在矩阵内,可以另行处理。
  • checkempty,矩阵元素为某些特殊值时,可另行处理。
  • enhanced,某些键只有设置了这个键才有效,使用这些键可能比较慢。
  • row-listcol-list,显式给出角标。
  • transpose,转置。
  • element-code,设置矩阵元素的显式方式,如 #1_{#2#3} 即为 <item>_{<row><col>}
  • element-code*,使用预定义的显式方式,或一个 <macro name>,如 use_i:nnn 即为 element-code=#1
  • infinite,是否为无穷维矩阵,即在最后一行和最后一列加上 \cdots 等。
  • last-rowlast-col,设置最后一列。
  • element-exceptelement-except+,它的值保存到 \physicxexcept 宏,element-code 可以使用它。
  • row-iteratecol-iterate,设置行列的索引,比如 \clist_item:Nn \row,行索引值作为 \clist_item:Nn 的第二个参数。增强版的 row-listcol-list
  • sepdim,设置每行的间距。
  • expand,设置输入的展开方式,如 expand=once, array=\arraydata,展开 \arraydata 一次,作为输入。
  • expand-element,每个元素都保存在一个宏里,它的顶层(top-level)展开并不一定是最终结果,可以选择这个宏的展开方式,一般不需要特别处理,除非需要把结果保存到一个宏里。
  • savetosaveto*,把整个矩阵保存到某个宏里,这个宏可以放在其它环境中可以正确输出。
  • MaxMatrixColsamsmathMaxMatrixCols 计数器的值。
  • beginendargsargs*type,诸如 \begin{matrix} 此类,这些内容不会保存到由 saveto 指定的宏里。
  • after-beginafter-begin+after-endafter-end+beginningbeginning+endingending+,特定位置的钩子。
  • cralignsep,分隔符。

这些就是 physicx 的主要功能了,看哪些需要移植到 physics2 里。physicx 代码写得很糟糕,不太可能直接复制过来。

@Firestar-Reimu
Copy link

physicx宏包还更新吗?是否更推荐使用physics2?

@Sophanatprime
Copy link
Author

physicx 宏包没有上传至 ctan 的计划,也不打算更新新的功能,但会修 bug。未来,它的部分功能会移植到一个新的宏包上。

physicx 使用 LPPL 1.3c 协议,可以在遵守该协议的前提下,自行修改和发布 physicx

目前,physics2 并没有完全覆盖 physicx 的功能。

@Firestar-Reimu
Copy link

OK知道了,看来如果有像我一样急需physics移植的又不想下载非CTAN包的就考虑physics2好了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants