ocultar texto livre sem ambiente adicional

ocultar texto livre sem ambiente adicional

para simplificar digamos que tenho um documento apenas com texto e teoremas.

Quero exibir apenas o texto contido nos teoremas. Por exemplo

    \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}

Eu quero apenas ter exibido: 1 um 1.Um 2.Dois Teorema:Bloh" 2.Dois

É possível sem precisar colocar o texto em um ambiente adicional?

Uma solução seria de alguma forma suprimir a saída normal com algum truque, por exemplo, colocar o tamanho da fonte em 0 (não consegui fazer isso), exceto nos teoremas.

Obrigado

EDIT: talvez uma maneira de fazer isso seria coletar automaticamente todo o conteúdo dos teoremas com alguns pacotes, não produzir o documento principal, e apenas exibir o que foi coletado, mas eu também gostaria de ter títulos de capítulos e seções...

Responder1

O OP estipula “digamos que tenho um documento apenas com texto e teoremas”.

Eu uso um tokencyclepseudoambiente chamado \shothms...\endshothms, cuja instância envolve todo o documento, para obter o resultado.

Como atualmente EDITADO, ele executará apenas instâncias de ambientes \chapter& \section(sem argumentos opcionais) e theorem& proposition. Observe que argumentos opcionais para essas macros/ambientes podem ser tratados via tokcycle, mas não tive vontade de investir tempo e código aqui. VerAnalisar argumento por caractere ao executar macros incorporadas, para ver um exemplo de onde isso é feito.

Os testes de macro (se alguém quiser adicionar macros adicionais para capturar) são realizados pelo \testmacrosmacro

\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
}

Os testes de ambiente (se forem necessários mais) são realizados pela \testenvsmacro, dados como

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

dadas as definições do preâmbulo

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

O MWE:

\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}

insira a descrição da imagem aqui

TERMO ADITIVO

Se alguém quisesse menos formatação do seccionamento, poderia redefinir \testmacroscomo

\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
}

resultando em

insira a descrição da imagem aqui

informação relacionada