catchfilebetweentags 包吞下行尾

catchfilebetweentags 包吞下行尾

我想将一个.tex文件的一部分仅包含到另一个.tex文件中。我想要包含的部分由一些注释标记分隔,因为它由捕捉标签之间的文件包裹。

我尝试了解决方案威尔·罗伯逊发表于\仅输入文件的一部分而且效果非常好......只是当源文件中的文本从一行跳到另一行时,输出 PDF 文件中应该出现的空间.tex消失了。

主要文件如下:

\documentclass{article}%
\usepackage{catchfilebetweentags}

\begin{document}
\ExecuteMetaData[inputfile]{mytag}
\end{document} 

而我想要从中获取文本的文件(即inputfile.tex)如下:

\documentclass{article}%

\begin{document}
Some text.
%<*mytag>
Text to be included in the main file. This is the first line
and this is the second line. See the problem?
%</mytag>

\end{document} 

就我而言,当我处理主文件时,我得到lineand的不是line andPDF 文件。

问题出在哪里?是 catcode 问题吗?我在 Windows 7 机器上使用 MiKTeX 2.9,希望有帮助。

答案1

由于某些原因,作者catchfilebetweentags发出命令

\endlinechar=-1

这显然是导致此行为的原因。我不知道删除它是否会产生其他副作用,但对于您的情况,它似乎有效:

\usepackage{catchfilebetweentags}

\makeatletter
\def\CatchFBT@Fin@l#1[#2]{%
   \begingroup
      %\endlinechar\m@ne % <- this is the guilty party
      \makeatletter #2%
      \scantokens\expandafter{%
         \expandafter\CatchFBT@tok\expandafter{\the\CatchFBT@tok}}%
      \CatchFBT@IsAToken{#1}
         {\global#1\expandafter{\the\CatchFBT@tok}}
         {\xdef#1{\the\CatchFBT@tok}}%
      \ifx\CatchFBT@tok#1\else\global\CatchFBT@tok{}\fi
   \endgroup
}% \CatchFBT@Final
\makeatother

您不需要从包中复制整个定义,而是可以使用etoolbox

\usepackage{etoolbox}
\makeatletter
\patchcmd{\CatchFBT@Fin@l}{\endlinechar\m@ne}{}
  {}{\typeout{Unsuccessful patch!}}
\makeatother

相关内容