
Laut der Paketbeschreibung sollte catchfilebetweentags
das Kommando \ExecuteMetaData*[<file>]{tag}
dasselbe bewirken wie \ExecuteMetaData[<file>]{tag}
das Entfernen von Kommentarzeilen mit einem einzigen Kommentar %
am Anfang. Datei:
\documentclass{article}
\usepackage{catchfilebetweentags}
\begin{document}
\ExecuteMetaData*[example.tex]{tag}
\end{document}
mit der folgenden Datei example.tex:
%<*tag>
some text
%some more text
%</tag>
sollte die folgende Ausgabe erzeugen:
etwas Text etwas mehr Text
Leider gibt es in Texmaker:
[beispiel.tex]tag
während es in Overleaf 30 Sekunden lang kompiliert und ein Timeout-Fehler auftritt. Wie kann das behoben werden?
Antwort1
Leider gibt es keine Lösung. Betrachten Sie das Beispiel
\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}
Die erste \CatchFileBetweenTags
beginnt mit
\CatchFileBetweenTags #1#2#3->\CatchFileBetweenDelims \CatchFBT@tok {#2}{%<*#3>}{%</#3>}[\CatchFBT@sanitize ]\CatchFBT@Final {#1}
#1<-\foo
#2<-\jobname -example.tex
#3<-tag
während der zweite
\CatchFileBetweenTags #1#2#3->\CatchFileBetweenDelims \CatchFBT@tok {#2}{%<*#3>}{%</#3>}[\CatchFBT@sanitize ]\CatchFBT@Final {#1}
#1<-*
#2<-\foo
#3<-\jobname -example.tex
und man sieht deutlich, dass etwas nicht stimmt.
Schlimmer noch: die Definition von \ExecuteMetaData
ist
% catchfilebetweentags.sty, line 53:
\newrobustcmd*\ExecuteMetaData[2][\jobname]{%
\CatchFileBetweenTags\CatchFBT@tok{#1}{#2}%
\global\expandafter\CatchFBT@tok\expandafter{%
\expandafter}\the\CatchFBT@tok
}% \ExecuteMetaData
also da istüberhaupt keine Vorsorgezur Unterscheidung zwischen \ExecuteMetaData
und \ExecuteMetaData*
.
Offenbar hat der Autor seine Wünsche zum Paket dokumentiert, aber vergessen, diese umzusetzen.