更改 WolframAlpha 输出字符的 catcode

更改 WolframAlpha 输出字符的 catcode

有时我会利用 WolframAlpha 进行一些简单的计算,然后将结果插入我的 latex 代码中。但我发现将 WA 给出的输出调整为 LaTeX 语法很烦人。

当输出是矩阵时,可复制(纯文本)输出类似于

    a | b | c
    d | e | f
    g | h | i 

所以我决定用命令将垂直线的 catcode 更改|为对齐字符的 catcode

\catcode`|=4

当然,我必须在群组内执行此操作,以避免出现严重问题。在这里,我得到了一个可以正常工作的代码,但我问的是它是否是正确的执行此操作的方法以及为什么添加一些修改后它不起作用。这是我的代码。

\[ \catcode`|=4 %changing the catcode to that of alignment character 
M(f_{V})=\begin{pmatrix}
    2 | 0 | 0\\
    1 | 1 | 3\\
    0 | 0 | -2
\end{pmatrix}
\] 

放入\begigroup \endgroup作品内很好:

\[
M=\begingroup \catcode`|=4\begin{pmatrix}
    a|b|c\\ d|e|f\\ g|h|i
\end{pmatrix} \endgroup=M(f|V) %It works either
\]

but inside `\begin{matrix}` `\end{matrix}` it does not:

\[
M= \begin{pmatrix}\catcode`|=4  %It doesn't work
    a|b|c\\ d|e|f\\ g|h|i
\end{pmatrix} 
\]

最后,

\[M=\begingroup \catcode`|=4\begin{pmatrix}
    a|b|c\\ d|e|f\\ g|h|i
\end{pmatrix} \endgroup=M(f|V)
\]

\[{ \catcode`|=4\begin{pmatrix}
a|b|c\\ d|e|f\\ g|h|i
\end{pmatrix} }=M(f|V) \] ?

\documentclass{article} \usepackage{amsmath}我在序言中用到。

答案1

当谈到协调的环境时,你为适应变化而做出的任何改变|都必须发生外部环境。这里我没有诉诸 catcode 更改,而是使用标记循环在执行之前逐字检查标记,在环境执行之前|将所有出现的 更改为&。使用转义字符(此处重新定义为@),我也可以在这样的环境中插入实际|标记,如第 3 个示例所示。

\documentclass{article}
\usepackage{mathtools,tokcycle}
\settcEscapechar{@}% OTHERWISE | HAS SPECIAL MEANING TO tokcycle
\Characterdirective{\ifx|#1\addcytoks{&}\else\addcytoks{#1}\fi}
\begin{document}
\tokencyclexpress
\[
M(f_{V})=\begin{pmatrix}
    2 | 0 | 0\\
    1 | 1 | 3\\
    0 | 0 | -2
\end{pmatrix}
\] 
\endtokencyclexpress
Example of aligned output
\tokencyclexpress
\begin{alignat*}{3}
|k_1     ||\geq 1 \quad\land \quad ||k_1     \leq a_1      \\
|k_2     ||\geq 1 \quad\land \quad ||k_2     \leq a_2      \\
|\qquad \cdots \\
|k_{n-1} ||\geq 1 \quad\land ||k_{n-1} \leq a_{n-1}  \\
|k_n     ||\geq 1 \quad\land ||k_n     \leq a_n      \quad \}
\end{alignat*}
\endtokencyclexpress
Escaping a vertical bar within such an environment:
\tokencyclexpress
\[
M(f_{V})=\begin{pmatrix}
    2 | 0 | 0\\
    1 | @|x|@ | 3\\
    0 | 0 | -2
\end{pmatrix}
\] 
\endtokencyclexpress
\end{document}

在此处输入图片描述

答案2

之后您无法更改类别代码\begin{pmatrix},因为对齐单元格会形成组,因此一旦|找到第一个,就会忘记分配。

两者之间没有显著差异

{\catcode`|=4 \begin{pmatrix}...\end{pmatrix}}

\begingroup\catcode`|=4 \begin{pmatrix}...\end{pmatrix}\endgroup

|所以您可以使用其中任何一种。但我有个坏消息要告诉您:您不能使用这样的矩阵,甚至不能更改内部align或其他显示环境的类别代码amsmath,因为它们将整个环境读取为宏参数,这会冻结类别代码。

您需要更改类别代码外部这样的环境,但当然这不允许|在相同的环境中使用其标准含义。

我会定义一个Wmatrix环境。当然,你需要\\手动添加。

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn

\NewDocumentEnvironment{Wmatrix}{b}
 {
  \antonio_wmatrix:n { #1 }
 }
 {}

\tl_new:N \l__antonio_wmatrix_body_tl

\cs_new_protected:Nn \antonio_wmatrix:n
 {
  \tl_set:Nn \l__antonio_wmatrix_body_tl { #1 }
  \tl_replace_all:Nnn \l__antonio_wmatrix_body_tl { | } { & }
  \begin{pmatrix} \tl_use:N \l__antonio_wmatrix_body_tl \end{pmatrix}
 }

\ExplSyntaxOff

\begin{document}

\begin{align*}
M(f_{V})&=
\begin{Wmatrix}
    2 | 0 | 0\\
    1 | 1 | 3\\
    0 | 0 | -2
\end{Wmatrix}
\\
&=
\begin{Wmatrix}
    2 | 0 | 0\\
    1 | 1 | 3\\
    0 | 0 | -2\\
\end{Wmatrix}
\end{align*}

\end{document}

在此处输入图片描述

在示例中,我展示了环境也在内部运行align,并且尾随\\得到正确处理。

相关内容