catchfilebetweentags 与 xypic 的一种箭头之间存在冲突:\next@ 的参数有一个额外的 }

catchfilebetweentags 与 xypic 的一种箭头之间存在冲突:\next@ 的参数有一个额外的 }

我正在使用的解决方案https://tex.stackexchange.com/a/4952/1403将一部分输入file.tex到另一个文件中。

但我收到了这个错误:

在此处输入图片描述

在线\ExecuteMetaData[file.tex]{tag}

这是 MWE。要调用的文件是:

%<*tag>

\begin{equation}  \xymatrix{A\ar@(ul,ur)^\Sigma }\end{equation}

%</tag>

这是主要文件:

\documentclass[a4paper,12pt]{amsbook} 
\usepackage{catchfilebetweentags}
\usepackage{xypic}
\begin{document}

\ExecuteMetaData[file.tex]{tag}

\end{document}

xypic如果我不回忆起它,那么被回忆起的代码就会起作用,而是直接在主文件上写下该行。

答案1

catchfilebetweentags读取文件并将 @ 的 catcode 设置为字母。这会破坏\ar@xypic 的命令,因为它将 @ 的 catcode 视为“其他”。

无需外部文件即可演示此问题(见下文)。我看不出有什么好办法可以避免使用\makeatlettercatchfilebetweentags因为它是硬编码的,删除它会破坏其他代码。您可以做的是定义一个命令来代替\ar@xypic 中的 :

\documentclass[a4paper,12pt]{amsbook}
\usepackage{catchfilebetweentags}
\usepackage{xypic}

\newcommand\myarat{\ar@}

\begin{document}

\makeatletter %done by catchfilebetweentags 
%<*tag>

%\begin{equation}  \xymatrix{A\ar@(ul,ur)^\Sigma }\end{equation} %error

\begin{equation}   \xymatrix{A\myarat(ul,ur)^\Sigma }\end{equation}

%</tag>

\end{document}

如果您想保留,\ar@可以尝试以下操作:

\documentclass[a4paper,12pt]{amsbook}
\usepackage{catchfilebetweentags}
\usepackage{xypic}


\begin{document}
\CatchFileBetweenTags{\mytemp}{file}{tag}
\scantokens\expandafter{\mytemp}


\end{document}

相关内容