仅编译命令内部的内容

仅编译命令内部的内容

我正在寻找一种方法来只编译给定命令(或环境)中的内容。我正在攻读博士学位,这样,我就可以拥有一份完整的文档,其中有一些写得不好的部分,供我自己使用,还有一个版本,只包含正确的部分,供我的导师使用。

一开始,我

\newcommand{\blank}[1]{}

但具体说明什么是可以的,而不是相反,会更加实际。

我有两个想法。

第一个是:

\documentclass{article}

\long\def\blank#1\endblank{}
\long\def\keep#1{\endblank#1\blank}

\begin{document}    
\blank

XXX
\keep{AAA}
XXX

\endblank
\end{document}

但是 LaTex 似乎\keep在寻找时不会扩展\endblank,最终一切都被避免,并且没有什么可打印的。

我的第二个想法是:

\documentclass{article}

\long\def\blank#1\keep{\next}

\long\def\next#1{
  \def\foo{#1}
  \ifx\foo\empty\else
    #1\blank
  \fi
}

\begin{document}
\blank

XXX
\keep{AAA}
XXX

\keep{}
\end{document}

这个似乎有效,但是因为\keep它应该处理相当大的文本块,所以我担心我做错了什么。

我的问题是:

  • 有没有办法让第一个想法发挥作用并让 LaTeX 扩展一些命令来寻找分隔符?

  • 第二种解决方案是否“稳定”并且适合在大文件中使用?

  • 有没有更好/更合适的方法来做到这一点,或者我是否需要进行一些外部预处理?

  • 附加问题:有没有一种简单的方法可以使第二个想法在环境中发挥作用\begin{keep}

写完这篇文章后,我注意到我可能应该把这个问题分成两部分,很抱歉...请告诉我是否应该这样做!

相关内容