amscd 和 unicode-math 之间的冲突

amscd 和 unicode-math 之间的冲突

切换到 unicode-math 包后,用于交换图的 amscd 包不再起作用。我没有收到错误消息,但输出中显示了 @ 和 < 等符号。

我附加了一个几乎最小的例子,它以前曾起作用。

\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{unicode-math}
\usepackage{amscd}
\newcommand\xbf[1]{#1}
\newcommand\fg[1]{#1}
\newcommand\obf[1]{#1}
\newcommand\R{{R}}
\begin{document}
Diagram:
  \begin{equation*}
  \begin{CD}
    \obf{\omega} \in \R^{3\times 3} @<\xbf{Ad}_{\xbf{B}}<< \obf{\Omega} \in \R^{3\times 3} \\
    @A\hat{\ }AA @AA\hat{\ }A\\
    \fg{\omega}=\xbf{B}\fg{\Omega} \in\R^3 @<\xbf{B}<< \fg{\Omega}\in \R^3
  \end{CD}
  \end{equation*}
\end{document}

答案1

amscd包执行

\mathcode`@="8000

以使数学活跃起来。它也会在启动环境时@执行,其中定义为\CDatCD\CDat

\gdef\CDat{\let @=\Iat}

在数学中,数学@是活跃的。知道数学\Iat是什么并不重要,重要的是数学是活跃的,并且在处理环境时@具有意义。\IatCD

不幸的是,unicode-math将 处的数学代码标准化\begin{document},因此 的数学代码的设置@被遗忘了。

您实际上可以改善环境的定义CD,使其不受周围条件的影响(这也应该由包来完成amscd,但由于历史原因而没有这样做)。

\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{amscd}
\usepackage{unicode-math}

\begingroup\lccode`~=`@ \lowercase{\endgroup
  \def\CDat{\let~\Iat\mathcode`@="8000\relax}%
}

\newcommand\xbf[1]{#1}
\newcommand\fg[1]{#1}
\newcommand\obf[1]{#1}
\newcommand\R{{R}}

\begin{document}
Diagram:
  \begin{equation*}
  \begin{CD}
    \obf{\omega} \in \R^{3\times 3} @<\xbf{Ad}_{\xbf{B}}<< \obf{\Omega} \in \R^{3\times 3} \\
    @A\hat{\ }AA @AA\hat{\ }A\\
    \fg{\omega}=\xbf{B}\fg{\Omega} \in\R^3 @<\xbf{B}<< \fg{\Omega}\in \R^3
  \end{CD}
  \end{equation*}
\end{document}

或者,使用最新版本的 LaTeX(2020-10-01),你可以将以下三行代码替换\begingroup}

\AtBeginEnvironment{CD}{\mathcode`@="8000\relax}

尽管这对我没什么吸引力。

在此处输入图片描述

tikz-cd

\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\usepackage{tikz-cd}

\newcommand\xbf[1]{#1}
\newcommand\fg[1]{#1}
\newcommand\obf[1]{#1}
\newcommand\R{{R}}

\begin{document}

Diagram:
\begin{equation*}
  \begin{tikzcd}
  \obf{\omega} \in \R^{3\times 3} &
  \obf{\Omega} \in \R^{3\times 3} \arrow[l,"\xbf{Ad}_{\xbf{B}}"']
  \\
  \fg{\omega}=\xbf{B}\fg{\Omega} \in\R^3  \arrow[u,"\hat{\ }"] &
  \fg{\Omega}\in \R^3 \arrow[l,"\xbf{B}"'] \arrow[u,"\hat{\ }"]
  \end{tikzcd}
\end{equation*}

\end{document}

在此处输入图片描述

答案2

如果重置@的数学代码,它似乎可以再次起作用:

\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amscd}
\usepackage{unicode-math}
\newcommand\xbf[1]{#1}
\newcommand\fg[1]{#1}
\newcommand\obf[1]{#1}
\newcommand\R{{R}}
\begin{document}


Diagram:
  \begin{equation*}\mathcode`\@="8000
  \begin{CD}
    \obf{\omega} \in \R^{3\times 3} @<\xbf{Ad}_{\xbf{B}}<< \obf{\Omega} \in \R^{3\times 3} \\
    @A\hat{\ }AA @AA\hat{\ }A\\
    \fg{\omega}=\xbf{B}\fg{\Omega} \in\R^3 @<\xbf{B}<< \fg{\Omega}\in \R^3
  \end{CD}
  \end{equation*}
\end{document}

相关内容