storebox 与 tcolorbox 冲突

storebox 与 tcolorbox 冲突

根据这个主题如何设计一个查询内部所需包的命令?我在包裹存储箱方面遇到了麻烦。

看一下这个 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它将提供将被吞噬的“丢失的令牌”。

相关内容