我有大量内容需要以多种不同的方式组合,并希望将一个文件中的摘录用于另一个文件中。我已指定:
\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}