为什么 \ExecuteMetaData 会破坏我的段落?

为什么 \ExecuteMetaData 会破坏我的段落?

我有大量内容需要以多种不同的方式组合,并希望将一个文件中的摘录用于另一个文件中。我已指定:

\usepackage{catchfilebetweentags}

然后我有一个包含标记部分的外部文件,内容如下:

%<*tag>
\section{section: tag}

paragraph one

paragraph two
%</tag>

我可以轻松地将这些内容吸入另一个文档中:

\ExecuteMetaData[bits.tex]{tag}

问题是,当它过来时,不再有任何段落。\section格式正确,但之后我无法让正常段落发挥作用。即使添加也\para没有效果。

奇怪的是,如果我仅输入文件,它就可以正常工作:

\input{bits.tex}

...按预期工作。唯一的问题是这得到了所有的文件,而我只想要其中的部分内容。我考虑过用自己的 s 来组织位文件,\input但系统很快就变得混乱,我的文案人员很难处理。

如何在通过 拉取的内容中恢复正常的段落环境\ExecuteMetaData

答案1

您可以通过条件语句提供自己的“标签”系统。让我解释一下:

对于每个标签,通过<tag>定义一个条件。然后,在文档内部,使用...括住标签组。现在,您可以使用将文件内容插入到新生成的“标签”之间。\if<tag>\newif\if<tag>\if<tag>\fi\inputbetweentags{<tag>}{<filename>}

这是一个简单的例子:

在此处输入图片描述

\documentclass{article}
\setlength{\parindent}{0pt}% Just for this example
\usepackage{filecontents}% http://ctan.org/pkg/filecontents

\newif\iftagA% <tagA>
\newif\iftagB% <tagB>

\begin{filecontents*}{filename.tex}
\iftagA% <tagA>
\section{Section A}
A paragraph one

A paragraph two
\fi% </tagA>
\iftagB% <tagB>
\section{Section B}
B paragraph one

B paragraph two
\fi% </tagB>
\end{filecontents*}

\newcommand{\inputbetweentag}[2]{{% \inputbetweentag{<tag>}{<filename>}
  \expandafter\let\csname if#1\endcsname\iftrue% Make "tag" true
  \input{#2}}}% Input file
\begin{document}
Number 1

\inputbetweentag{tagA}{filename.tex}

Number 2

\inputbetweentag{tagB}{filename.tex}

Number 3
\end{document}

答案2

这是一个解决方法,可以避免设置\endlinechar为不需要的值。我不知道是否有副作用。

\begin{filecontents*}{calebits.tex}
%<*tag>
\section{section: tag}

paragraph one

paragraph two
%</tag>
\end{filecontents*}

\documentclass{article}
\usepackage{catchfilebetweentags}
\makeatletter
\def\CatchFBT@sanitize{%
   \@sanitize
   \@makeother\{%
   \@makeother\}%
%   \endlinechar=`\^^J% <--- This line modified
}% \CatchFBT@sanitize
\makeatother

\begin{document}

\ExecuteMetaData[calebits.tex]{tag}

\end{document}

在此处输入图片描述

相关内容