xymatrix 在内部部分时损坏

xymatrix 在内部部分时损坏

如果我在命令xymatrix内部使用section,它就不会编译。

例子:

\documentclass{article}
\usepackage[all,cmtip]{xy}
\begin{document}

\section{$\xymatrix{A\ar[r]&B}$}

\end{document}

编译错误:Argument of doSpecialRotate@@ has an extra {

我在这次讨论。问题是,我发现当我使用 bookmark 包或 hyperref 包时,它会崩溃。现在,我可以处理 bookmark 包,但 hyperref 包对我来说至关重要。以下是一个例子:

\documentclass[a4paper,11pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[all,cmtip,2cell]{xy}
\usepackage[pdftex]{hyperref}
\begin{document}

\DeclareRobustCommand{\ta}{\xymatrix{A\ar[r]&B}}
\section{A stepping stone: $\ta$}

\end{document}

编译错误:Argument of \xP@rotate@ has an extra }。如果你注释掉与 hyperref 相关的行,它就可以正常工作。

我怎样才能同时使用xymatrix内部命令\section和使用 hyperref 包?

答案1

书签中不能有排版说明;此外,您还需要保护中的脆弱命令\xymatrix

\documentclass[a4paper,11pt]{report}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}

\usepackage[all,cmtip,2cell]{xy}
\usepackage[unicode]{hyperref}
\usepackage{bookmark}

\newcommand{\protectedtexorpdfstring}[2]{%
  \texorpdfstring{\unexpanded{\unexpanded{#1}}}{#2}%
}

\begin{document}

\section{A stepping stone: \protectedtexorpdfstring{\xymatrix{A\ar[r]&B}}{A\textrightarrow B}}

\end{document}

在第二个参数\protectedtexorpdfstring(如果愿意,请选择一个更短的名称)中,您可以放置​​图表的近似表示或任何您喜欢的内容。

在此处输入图片描述

如果您还打算有一个目录,那么还有很多工作要做;问题是,当.toc读入文件时,的类别代码@是 11,这会造成混淆xypic

\txymatrix命令有两个参数:书签的内容\xymatrix和替代文本。

\documentclass[a4paper,11pt]{report}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}

\usepackage[all,cmtip,2cell]{xy}
\usepackage[unicode]{hyperref}
\usepackage{bookmark}

\newcommand{\protectedtexorpdfstring}[2]{%
  \texorpdfstring{\unexpanded{\unexpanded{#1}}}{#2}%
}

\newcommand{\txymatrix}[2]{%
  \protectedtexorpdfstring
    {$\catcode`\@=12 \scantokens{\xymatrix{#1}}$}
    {#2}%
}

\begin{document}

\tableofcontents

\section{A stepping stone: \txymatrix{A\ar[r]&B}{A\textrightarrow B}}

\section{A stepping stone: \txymatrix{K\Omega \ar@{~}[r]^-\simeq & KqB^b}{KOmega}}

\end{document}

在此处输入图片描述

相关内容