6

I'm using the solution from https://tex.stackexchange.com/a/4952/1403 to input a part of file.tex into another file.

But I'm getting this error:

enter image description here

at the line \ExecuteMetaData[file.tex]{tag}.

Here's a MWE. The file to be recalled is:

%<*tag>

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

%</tag>

Here is the main file:

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

\ExecuteMetaData[file.tex]{tag}

\end{document}

The xypic code being recalled does work if I don't recall it, but rather write the line directly on the main file.

4
  • Please provide a minimal example (or see here). That 'solution' is not a self-contained example, so it doesn't really help anyone understand what you are doing (wrong or differently or ...).
    – jon
    Apr 4, 2017 at 16:03
  • @jon: That's very hard to do in this case, because the error message doesn't tell me at which line of file.tex it is conflicting (line 24 is the ExecuteMetaData line). I tried to make a minimal example that recalls only a line using xypic, but that works. And so I don't really know where the problem is (and the file being inputted is not small, so as to make it easy to deal with). What can I do? Apr 5, 2017 at 8:43
  • 1
    The normal approach is to 'halve' the document (between \begin{document} and \end{document}) step by step. If the problem occurs in one half and not the other, then halve that half, and so on. It may be tricky in this case, but I think the principle is likely still sound. Once the document body problem is sorted out, then progressively strip out packages that seem, a priori, are unrelated to the problem (e.g., if the problem is not about tables, then table-related packages can probably go). Ideally, the minimal document is a small amount of document body and only a few packages.
    – jon
    Apr 5, 2017 at 23:25
  • @jon: thanks to your advice I was able to provide a really small MWE (or should I say, MNWE...) Apr 7, 2017 at 16:09

1 Answer 1

5
+50

catchfilebetweentags reads the file with the catcode of the @ set to letter. This breaks the \ar@ command of xypic as it espect the catcode of @ to be "other".

The problem can be demonstrated without external file (see below). I don't see a good way to avoid the \makeatletter in catchfilebetweentags, it is quite hardcoded and removing it breaks other code. What you can do is to define a command that you use instead of the \ar@ in the 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}

If you want to keep the \ar@ you can try this:

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


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


\end{document}
3
  • Thanks! However, I would very much like to keep my \ar@ intact... Apr 25, 2017 at 13:23
  • I added a suggestion, could work, but not really tested much. Apr 25, 2017 at 13:33
  • @UlrikeFischer: What is mytemp is the second part of your answer? How would it work with the command \ExecuteMetaData[file.tex]{tag}? Thanks
    – Colas
    Aug 11, 2018 at 14:31

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .