隐藏自由文本,无需附加环境

隐藏自由文本,无需附加环境

为了简化,假设我有一份仅包含文本和定理的文档。

我想仅显示定理中包含的文本。例如

    \documentclass[10pt]{book}

\usepackage{amsthm}

\theoremstyle{definition}
\newtheorem{theorem}{Definition}

\begin{document}
\chapter{One}
\section{One}
blah
\section{Two}
\begin{theorem}
Blo
\end{theorem}
\chapter{Two}
Blih

\end{document}

我只想要显示: 1.一 1.一2.二定理:Bloh” 2.二

无需将文本包含在附加环境中是否可行?

一种解决方案是以某种方式用一些技巧来抑制正常输出,例如将字体大小设置为 0(没有设法做到这一点),定理除外。

谢谢

编辑:也许一种方法是使用一些包自动收集定理的所有内容,不输出主文档,只输出已收集的内容,但我还希望有章节和部分标题......

答案1

OP 规定“假设我有一份只有文本和定理的文档”。

我使用一个tokencycle名为的伪环境\shothms...\endshothms,其中一个实例包裹整个文档,以实现结果。

按照目前的编辑,它将仅执行\chapter& \section(没有可选参数)和theorem&proposition环境的实例。请注意,这些宏/环境的可选参数可以通过 来处理tokcycle,但我不想在这里投入时间和代码。请参阅执行嵌入宏时按字符解析参数,作为完成此操作的示例。

宏测试(如果想要添加其他宏来捕获)由\testmacros宏执行

\newcommand\testmacros[1]{%
  \ifx\chapter#1\addcytoks{#1}\gdef\addarg{T}\else
  \ifx\section#1\addcytoks{#1}\gdef\addarg{T}\else
    \gdef\addarg{F}\fi\fi
}

环境测试(如果需要更多)由\testenvs宏执行,如下所示

\newcommand\testenvs[1]{%
  \ifx\thmchk#1 1\else
  \ifx\propchk#1 1\else
  0\fi\fi
}

给出了序言定义

\def\thmchk{theorem}
\def\propchk{proposition}

妇女权利委员会:

\documentclass{book}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{tokcycle}
\def\addarg{F}
\def\checktheorems{F}
\def\charson{F}
\def\thmchk{theorem}
\def\propchk{proposition}
\declaretheorem{theorem}
\declaretheorem{proposition}
\stripgroupingtrue
\tokcycleenvironment\shothms
  {\if T\charson\addcytoks{##1}\fi}
  {%
    \if T\addarg\addcytoks{{##1}}\gdef\addarg{F}\fi
    \if F\checktheorems
      \if T\charson\addcytoks{{##1}}\fi
    \else
      \gdef\tmp{##1}%
      \ifnum\testenvs{\tmp}=1\relax
        \if B\checktheorems
          \addcytoks{\begin{##1}}\gdef\charson{T}%
        \else
          \addcytoks{\end{##1}}\gdef\charson{F}%
        \fi
      \fi%
    \fi
    \gdef\checktheorems{F}
  }
  {%
    \ifx\begin##1\gdef\checktheorems{B}\else
      \ifx\end##1\gdef\checktheorems{E}\else
        \gdef\checktheorems{F}%
        \if T\charson\addcytoks{##1}\fi%
      \fi
    \fi
    \testmacros{##1}%
  }
  {\if T\charson\addcytoks{##1}\fi}
\newcommand\testmacros[1]{%
  \ifx\chapter#1\addcytoks{#1}\gdef\addarg{T}\else
  \ifx\section#1\addcytoks{#1}\gdef\addarg{T}\else
    \gdef\addarg{F}\fi\fi
}
\newcommand\testenvs[1]{%
  \ifx\thmchk#1 1\else
  \ifx\propchk#1 1\else
  0\fi\fi
}
\begin{document}
\shothms
\chapter{My Chapter}

Chapter text

\section{One}

blah blah
\section{Two}

\begin{theorem}
Bloh \textbf{Blah} \today
\end{theorem}

blih blih \textit{blow}

more blah

\begin{proposition}
Blah$^2$
\end{proposition}
Finis
\endshothms
\end{document}

在此处输入图片描述

附录

如果希望减少分段格式,可以重新定义\testmacros

\newcommand\testmacros[1]{%
  \ifx\chapter#1\addcytoks{\stepcounter{chapter}\par\noindent Chapter 
    \thechapter:~}\gdef\addarg{T}\else
  \ifx\section#1\addcytoks{\stepcounter{section}\par\noindent Section 
    \thesection:~}\gdef\addarg{T}\else
    \gdef\addarg{F}\fi\fi
}

导致

在此处输入图片描述

相关内容