如何重新定义环境以不产生输出?

如何重新定义环境以不产生输出?

我正在使用的verbatim环境

\begin{verbatim}
XXXX
\end{verbatim}

我希望有重新定义逐字环境的选项,这样就不会打印\begin{verbatim}和之间的任何\end{verbatim}内容。这样我就可以打印一份包含逐字信息的长版论文,以及一份省略逐字信息的短版论文。如果有人能告诉我如何做到这一点,我将不胜感激。

答案1

comment包裹允许您(重新)定义注释环境。因此,请在文档序言中包含以下内容:

\usepackage{comment}% http://ctan.org/pkg/comment
\excludecomment{verbatim}

这应该排除 verbatim环境内容。如果您想verbatim再次包含所有内容(对于文章的较长版本,请注释掉该\excludecomment{verbatim}行。

对于删除内容的更零散的方法verbatim,可以采取以下方法:

在此处输入图片描述

\documentclass{article}
\usepackage{comment}% http://ctan.org/pkg/comment
\begin{document}

\begingroup
\excludecomment{verbatim}
A
\begin{verbatim}
&^_%\{}
\end{verbatim}
B
\endgroup

A
\begin{verbatim}
&^_%\{}
\end{verbatim}
B

\end{document}

另一个温和的替代方案comment是使用environ。以下内容未经严格测试,但可以工作:

在此处输入图片描述

\documentclass{article}
\usepackage{environ}% http://ctan.org/pkg/environ
\makeatletter
\newcommand{\voidenvironment}[1]{%
  \expandafter\providecommand\csname env@#1@save@env\endcsname{}%
  \expandafter\providecommand\csname env@#1@process\endcsname{}%
  \@ifundefined{#1}{}{\RenewEnviron{#1}{}}%
}
\makeatother
\begin{document}

\begingroup
\voidenvironment{verbatim}%
A
\begin{verbatim}
&^_%\{}
\end{verbatim}
B
\endgroup

A
\begin{verbatim}
&^_%\{}
\end{verbatim}
B

\end{document}

注意输出的差异。在被吞噬之后,严格来说和verbatim之间只有一个换行符(空格)。AB

答案2

对于论文的较短版本,您可以加载comment包并将 的所有实例替换{verbatim}{comment}。这样,您就不必处理在逐字/注释区域中出现的&和等字符引起的问题。#

答案3

verbatim我是在战斗结束后很久才来的,但这里只是模仿了战斗的方式source2e

\documentclass{article}
\usepackage{amsthm}
\newtheorem{theo}{Theorem}

\makeatletter
\let\original@proof\proof

% Plagiarizing verbatim set-up:
\begingroup 
    \catcode `|=0 \catcode `[= 1 \catcode`]=2 
    \catcode `\{=12 \catcode `\}=12 \catcode`\\=12 
    |long|gdef|suppressed@proof #1\end{proof}[|end[proof]]
|endgroup
\def\makeproofsinvisible
  {\def\proof
      {\catcode`\{=12 \catcode `\}=12 \catcode`\\=12 \suppressed@proof }}
\def\makeproofsvisible{\let\proof\original@proof }
\makeatother

\begin{document}

\begin{theo}[Unkn.]
  Dog exists.
\end{theo}

\begin{proof}
  First step: actually, we don't really exist.
\end{proof}

\makeproofsinvisible

\begin{proof}
  Second step is censored.
\end{proof}

\makeproofsvisible

\begin{proof}
  Third Step: hence Dog exists.
\end{proof}


\end{document}

隐形证据

答案4

答案来自我之前的类似问题不使用 % 和注释环境来注释行@egreg 回答了这个问题。

似乎可以正常工作\begin{equation}.... 但不幸的是它不能很好地工作\begin{verbatim}...

不过,如果最终修复了错误,那将是一个好主意。它在未来通常会很有用

\documentclass[a4paper,10pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage{verbatim}
\usepackage{lipsum}

\newif\ifprolog
\long\def\startprolog#1\stopprolog{%
  \ifprolog
  \par
  \begingroup
  \let\\\par
   #1 
  \par\medskip
  \endgroup
  \fi}

\prologtrue % comment out for omitted the inside \startprolog \stopprolog content
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

\begin{document}

\lipsum[1]

\startprolog
\begin{equation}
 k = \frac{1}{2} m u^2
\end{equation}
\stopprolog

\lipsum[1]

\startprolog
\begin{verbatim}
> eqn:=diff(y(t),t,t)+4*y(t)=0:
> inits:=y(0)=1,D(y)(0)=-1:
> dsolve({eqn,inits},y(t));
\end{verbatim}
\stopprolog

\lipsum[2]

\end{document}

相关内容