
Для упрощения предположим, что у меня есть документ, содержащий только текст и теоремы.
Я хочу отобразить только текст, содержащийся в теоремах. Например
\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. Два Теорема: Блох" 2.Два
Возможно ли это без необходимости заключать текст в дополнительную среду?
Одним из решений было бы каким-то образом подавить нормальный вывод с помощью какого-нибудь трюка, например, установив размер шрифта равным 0 (не удалось этого сделать), за исключением теорем.
Спасибо
EDIT: возможно, одним из способов сделать это было бы автоматически собирать все содержимое теорем с помощью некоторых пакетов, не выводить основной документ, а выводить только то, что было собрано, но я также хотел бы иметь названия глав и разделов...
решение1
В ОП говорится: «Допустим, у меня есть документ, содержащий только текст и теоремы».
Для достижения результата я использую 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
}
в результате чего