我正在使用的解决方案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 视为“其他”。
无需外部文件即可演示此问题(见下文)。我看不出有什么好办法可以避免使用\makeatletter
,catchfilebetweentags
因为它是硬编码的,删除它会破坏其他代码。您可以做的是定义一个命令来代替\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}