根据catchfilebetweentags
软件包命令的描述\ExecuteMetaData*[<file>]{tag}
,它应该执行与“取消注释”相同的工作\ExecuteMetaData[<file>]{tag}
,并且以单个字符%
开头。文件:
\documentclass{article}
\usepackage{catchfilebetweentags}
\begin{document}
\ExecuteMetaData*[example.tex]{tag}
\end{document}
使用以下文件 example.tex:
%<*tag>
some text
%some more text
%</tag>
应该产生输出:
一些文字 更多文字
不幸的是,在 Texmaker 中它给出:
[示例.tex]标签
而在 Overleaf 中,编译需要 30 秒,然后弹出超时错误。如何修复?
答案1
抱歉,没有解决方案。请考虑以下示例
\begin{filecontents*}{\jobname-example}
%<*tag>
some text
%some more text
%</tag>
\end{filecontents*}
\documentclass{article}
\usepackage{catchfilebetweentags}
\begin{document}
\tracingmacros=1 % for debugging
\CatchFileBetweenTags{\foo}{\jobname-example.tex}{tag}\show\foo
\CatchFileBetweenTags*{\foo}{\jobname-example.tex}{tag}
%\ExecuteMetaData[\jobname-example.tex]{tag}
\end{document}
第一个\CatchFileBetweenTags
开始于
\CatchFileBetweenTags #1#2#3->\CatchFileBetweenDelims \CatchFBT@tok {#2}{%<*#3>}{%</#3>}[\CatchFBT@sanitize ]\CatchFBT@Final {#1}
#1<-\foo
#2<-\jobname -example.tex
#3<-tag
而第二个
\CatchFileBetweenTags #1#2#3->\CatchFileBetweenDelims \CatchFBT@tok {#2}{%<*#3>}{%</#3>}[\CatchFBT@sanitize ]\CatchFBT@Final {#1}
#1<-*
#2<-\foo
#3<-\jobname -example.tex
你可以清楚地看到有些地方不对劲。
更糟糕的是:的定义\ExecuteMetaData
是
% catchfilebetweentags.sty, line 53:
\newrobustcmd*\ExecuteMetaData[2][\jobname]{%
\CatchFileBetweenTags\CatchFBT@tok{#1}{#2}%
\global\expandafter\CatchFBT@tok\expandafter{%
\expandafter}\the\CatchFBT@tok
}% \ExecuteMetaData
所以有根本没有任何规定用于区分\ExecuteMetaData
和\ExecuteMetaData*
。
显然,作者记录了他对该软件包的愿望,但忘记实现它们了。