将任何环境和命令重新定义为空输出

将任何环境和命令重新定义为空输出

我定义了一些复杂的环境和命令。有时我需要只查看输出 PDF 的上层结构。为此,我需要一种进行试运行的方法。我使用一个\toggletrue{dryrun} 输入文件的命令\input{dryurn}

dryrun.tex,我的计划是重新定义那些复杂的命令/环境,以使用包产生空输出savesym

该命令很容易被重新定义为空命令。如何将环境重新定义为空主体。

这是我的 MWE

\documentclass{article}
\usepackage{savesym,etoolbox}

% these definition go into a separate file
\newenvironment{myenv}{
    \noindent\textbf{Preamble}\hfill\\% % Preamble stands for something much more complicated
} {%
    \newline\textbf{Epilogue}% % epilogue also stands for more complicated commands
}
\newcommand{\mycmd}{\textbf{COMPLICATED COMMAND}}

\newtoggle{dryrun}
\togglefalse{dryrun}
\toggletrue{dryrun}

% the following are contents of dryrun.tex
\iftoggle{dryrun} {
    \savesymbol{myenv}
    \savesymbol{endmyenv}
    \renewcommand{\mycmd}{\,}
    \newenvironment{myenv}{
        \origmyenv
    }{
        \origendmyenv
    }% should be empty, but still produce the preamble and epilogue
}

\begin{document}

Environment = 

\begin{myenv} 
    This line should be only in a normal run
\end{myenv} % does not work as intended for the dry-run

Command = \mycmd % works correctly for dry-run

\end{document}

在此处输入图片描述

答案1

您可以使用此verbatim包来实现此目的:

\usepackage{verbatim}
\let\myenv=\comment
\let\endmyenv=\endcomment

当然,这最终只是丢弃了内容。如果你想包含序言和结语,你必须查看环境的定义commentverbatim对其进行稍微的编辑:

\def\myenv{\noindent\textbf{Preamble}\hfill\\
 \@bsphack
 \let\do\@makeother\dospecials\catcode‘\^^M\active
 \let\verbatim@startline\relax
 \let\verbatim@addtoline\@gobble
 \let\verbatim@processline\relax
 \let\verbatim@finish\relax
 \verbatim@}
\def\endmyenv{\newline\textbf{Epilouge}\@esphack}

答案2

我根据@Don Hosek 的想法找到了答案。

这保留了所有的序言和结语。

myenv首先我保留了using指令的含义savesymbol,然后我使用辅助命令来嵌入空的,myenv然后调用辅助环境AUXmyenv。这个辅助环境被重新定义为使用包的注释verbatim。最后myenv用所有这些结构重新定义。

MWE 形式的解决方案是:

\documentclass{article}
\usepackage{savesym,etoolbox,verbatim}

% these definition go into a separate file
\newenvironment{myenv}{
    \noindent\textbf{Preamble}\hfill\\%
} {%
    \newline\textbf{Epilouge}%
}
\newcommand{\mycmd}{\textbf{COMPLICATED COMMAND}}

\newtoggle{dryrun}
%\togglefalse{dryrun}
\toggletrue{dryrun}

\makeatletter
% the following are contents of dryrun.tex
\iftoggle{dryrun} {
    \savesymbol{myenv}
    \savesymbol{endmyenv}
    \renewcommand{\mycmd}{\,}
    
    \newcommand{\AUXenv}{
        \origmyenv %
        % optional TEXT
        \origendmyenv %
    }
    
    \newenvironment{AUXmyenv}{}{}
    
    \newenvironment{myenv}{
        \AUXenv
        \AUXmyenv
    }{
        \endAUXmyenv
    }
    
    \let\AUXmyenv=\comment
    \let\endAUXmyenv=\endcomment
    
}
\makeatother


\begin{document}

Environment = 

\begin{myenv} 
    This line should be only in a normal run
\end{myenv} % does not work as intended for the dry-run


Command = \mycmd % works correctly for dry-run



\end{document}

相关内容