根据这个主题如何设计一个查询内部所需包的命令?我在包裹存储箱方面遇到了麻烦。
看一下这个 MWE 示例。
使用 pdflatex 进行编译,一切正常......
this example works
\documentclass{article}
\usepackage{storebox}
\usepackage{tcolorbox}
\begin{document}
test
\end{document}
使用 pdflatex 进行编译,一切正常,但 storebox 被禁用......
this example also works
\documentclass{article}
\usepackage{tcolorbox}
\usepackage[disable]{storebox}
\begin{document}
test
\end{document}
编译此示例,出现错误...
this example wont work
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{storebox}
\begin{document}
test
\end{document}
但以下是所需的...
\makeatletter
\let\req@onefilewithoptions\@onefilewithoptions
\def\@onefilewithoptions#1[#2][#3]#4{%
\req@push{#1.#4}%
\req@onefilewithoptions{#1}[{#2}][{#3}]{#4}%
\req@pop
}
\let\req@list\@empty
\let\req@item\relax
\let\req@top\relax
\newcounter{req@count}
\def\req@push#1{%
% \typeout{*** [#1]}% debug
\ifcase\value{req@count}%
\@ifundefined{req@#1}{%the file, whose package dependencies
\global\expandafter
\let\csname req@#1\endcsname\@empty
\xdef\req@list{%
\req@list
\req@item{#1}%
}%
}{}%
\xdef\req@top{#1}%
\edef\req@tmp{%
\noexpand\AtBeginDocument{%
\noexpand\stepcounter{req@count}%
\xdef\noexpand\req@top{#1}%
}%
}%
\req@tmp
\else
\expandafter\ifx\csname req@\req@top\endcsname\@empty
\expandafter\xdef\csname req@\req@top\endcsname{#1}%
\else
\edef\req@tmp{%
\noexpand\in@{,#1,}{,\csname req@\req@top\endcsname,}%
}%
\req@tmp
\ifin@
\else
\expandafter\xdef\csname req@\req@top\endcsname{%
\csname req@\req@top\endcsname
,#1%
}%
\fi
\fi
\fi
\stepcounter{req@count}%
}
\def\req@pop{%
\addtocounter{req@count}{-1}%
\ifcase\value{req@count}%
\global\let\req@top\relax
\AtBeginDocument{%
\addtocounter{req@count}{-1}%
\global\let\req@top\relax
}%
\fi
}
\def\req@process{%
\typeout{Requirement list}%
\typeout{================}%
\let\req@item\req@process@item
\req@list
\typeout{================}%
}
\def\req@process@item#1{%
\typeout{* #1\req@info{#1}}%
\expandafter\@for\expandafter\req@tmp
\expandafter:\expandafter=\csname req@#1\endcsname\do{%
\typeout{ \space> \req@tmp\req@info{\req@tmp}}%
}%
}
\def\req@info#1{%
\@ifundefined{ver@#1}{}{ [\@nameuse{ver@#1}]}%
}
\AtEndDocument{\req@process}%
\makeatother
% this example also wont work because there is content in the page which should not appear
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{storebox}
\begin{document}
test
\end{document}
在唯一的一页上我应该读到“test”。但我读到的是“req@count-1test”
我喜欢生成文件列表的代码,因为我解析这个文件并将生成的 csv 包含在报告中(或者我想要这样做)。
编辑1:
egreg 指出的问题是我在尝试为示例 4 寻找解决方案时确定的第二个问题。pdf 第一页中有一些不应该出现在这里的内容。
我希望在文档中看到“test”,但其他什么都看不到。我看到的是“req@count-1test”,我觉得这很奇怪...
答案1
这个问题是storebox
已经描述的一个错误tikz 与 storebox 结合时出现的问题:缺少数字,视为零。使用动画时,页面输出文本“graphicx”,
但是,由于您在开头添加的代码,我在那里的回答中建议的解决方法无效,因为空组插入得太晚了。而不是\ifdim
,\addtocounter
来自的指令\req@pop
被吞噬,导致其参数被打印。
你可以使用以下方法修复此错误
\def\req@pop{%
\addtocounter{req@count}{-1}%
\ifcase\value{req@count}%
\global\let\req@top\relax
\AtBeginDocument{%
\relax\addtocounter{req@count}{-1}% <---- ADDED \relax
\global\let\req@top\relax
}%
\fi
}
对于其他包含的文件,它\relax
不会做任何特殊的事情,但在这种情况下,storebox-pgf
它将提供将被吞噬的“丢失的令牌”。