l3doc:有条件地在宏代码之间包含调试代码

l3doc:有条件地在宏代码之间包含调试代码

我的package.dtx导出package.stypackage-debug.sty包含更多未在中排版的材料package.pdf。为了实现这一点,我使用以下模式,其中package-debugnodebug导出标志为 false 时,包名称是,当导出标志为 falsepackage时。环境会吞噬不应出现在中的行。debuggobblepackage.pdf

% \iffalse meta-comment
%<*driver>
\documentclass{l3doc}
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \NewDocumentEnvironment {gobble} { +b } {} {}
%    \begin{gobble}
%<*package>
%    \end{gobble}
%
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[2020/01/01]
\ProvidesExplPackage
%    \end{macrocode}
% \begin{gobble}
%<*!debug>
% \end{gobble}
%    \begin{macrocode}
  {package}
%    \end{macrocode}
% \begin{gobble}
%</!debug>
%<*!nodebug>
  {package-debug}
%</!nodebug>
% \end{gobble}
%    \begin{macrocode}
  {2022/10/28}
  {1.0}
  {Minimal example}
%    \end{macrocode}
%    \begin{gobble}
%</package>
%    \end{gobble}

输出内容为

enter image description here

如何删除第 3 行之前和之后的多余垂直空间?

我尝试过类似

\NewDocumentEnvironment {gobble} { +b } {\vspace{-0.5em}} {}

但在实际中,-0.5em长度有时太大,有时太小。

答案1

这与您的调试和吞噬代码无关。您也可以通过两个宏代码环境轻松获得此空间。宏代码使用 trivlist,因此最简单的方法是使用 enumitem 并设置选项nosep

% \iffalse meta-comment
%<*driver>
\documentclass{l3doc}
\usepackage{enumitem}
\setlist[trivlist]{nosep}


\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \NewDocumentEnvironment {gobble} { +b } {} {}
%    \begin{gobble}
%<*package>
%    \end{gobble}
%
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[2020/01/01]
\ProvidesExplPackage
%    \end{macrocode}
% \begin{gobble}
%<*!debug>
% \end{gobble}
%    \begin{macrocode}
  {package}
%    \end{macrocode}
% \begin{gobble}
%</!debug>
%<*!nodebug>
  {package-debug}
%</!nodebug>
% \end{gobble}
%    \begin{macrocode}
  {2022/10/28}
  {1.0}
  {Minimal example}
%    \end{macrocode}
%    \begin{gobble}
%</package>
%    \end{gobble}

enter image description here

相关内容