如果我在命令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}