我想将一个.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 and
PDF 文件。
问题出在哪里?是 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