![隐藏自由文本,无需附加环境](https://linux22.com/image/421188/%E9%9A%90%E8%97%8F%E8%87%AA%E7%94%B1%E6%96%87%E6%9C%AC%EF%BC%8C%E6%97%A0%E9%9C%80%E9%99%84%E5%8A%A0%E7%8E%AF%E5%A2%83.png)
为了简化,假设我有一份仅包含文本和定理的文档。
我想仅显示定理中包含的文本。例如
\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
}
导致