我定义了一些复杂的环境和命令。有时我需要只查看输出 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
当然,这最终只是丢弃了内容。如果你想包含序言和结语,你必须查看环境的定义comment
并verbatim
对其进行稍微的编辑:
\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}