以下是我使用 xypic 时遇到的问题示例
\documentclass[10pt,a4paper,french,oneside]{amsbook}
\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage[applemac]{inputenc}
\usepackage[all,cmtip]{xy}
\begin{document}
\[
\xymatrix@!{
P\ar[r]^{p_{2}}\ar[d]_{p_{1}}&Y\ar[d]^g\\
X\ar[r]^f&Z}
\]
\end{document}
下面是我排版时遇到的错误
./essai.tex:16: Xy-pic error: <addop> or <direction> or one of 1RCMLHW*! expect
ed.
\xyerror@ ...#2}\fi \errmessage {Xy-pic error: #1}
}
l.16 \xymatrix@!
{
我强烈怀疑这是由于 babel 和法语选项搞乱了一些东西,因为字符 ! 似乎无法识别(例如 @R 工作正常)。我该怎么办?
答案1
解决这个问题!
是不够的,因为?;:^="
在 Xy-pic 语法中也使用了它。
您可以通过禁用所有 Xy-pic 构造中的简写来全局解决该问题:
\documentclass[10pt,a4paper,french,oneside]{amsbook}
\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage[all,cmtip]{xy}
\usepackage{etoolbox}
\preto\xy{\shorthandoff{!?;:^="}}
\begin{document}
\[
\xymatrix@!{
P\ar[r]^{p_{2}}\ar[d]_{p_{1}}&Y\ar[d]^g\\
X\ar[r]^f&Z}
\]
\end{document}
如果没有它,etoolbox
那么\preto\xy{...}
\toks0=\expandafter{\xy}
\edef\xy{\noexpand\shorthandoff{!?;:^="}\the\toks0 }
答案2
您可以在本地!
使用以下命令返回\shorthandoff{!}
:
\documentclass[10pt,a4paper,french,oneside]{amsbook}
\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage[applemac]{inputenc}
\usepackage[all,cmtip]{xy}
\begin{document}
\[\shorthandoff{!}
\xymatrix@!{
P\ar[r]^{p_{2}}\ar[d]_{p_{1}}&Y\ar[d]^g\\
X\ar[r]^f&Z}
\]
\end{document}