我在文档正文中陈述一个定理,并在附录中证明它。我使用 thmtools 的可重述环境在那里重述该定理。但是,我现在需要将附录放在单独的 pdf 文件中(因此是单独的 tex 文档)。我使用 xr 和 xcite 使交叉引用和书目引用能够很好地发挥作用。
但是 restatable 创建的命令没有被携带。有没有办法在单独的文档中重新陈述附录中的定理?
以下是 MWE:
主要文件:main.tex
\documentclass{article}
\usepackage{thmtools}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{restatable}{theorem}{thmcmd}\label{thmlabel}
Here is the statement of the theorem.
\end{restatable}
The above is Theorem~\ref{thmlabel}.
In this way I can restate it:
\thmcmd*
\end{document}
附录:appendix.tex
\documentclass{article}
\usepackage{xr}
\externaldocument{main}
\usepackage{thmtools}
\newtheorem{theorem}{Theorem}
\begin{document}
I can refer to Theorem~\ref{thmlabel}.
But I cannot restate it like this:
% \thmcmd*
\end{document}
答案1
tcolorbox
包提供了一些宏,用于保存盒子的内容并在以后使用。
最简单的例子可能是:
\documentclass{article}
\usepackage[most]{tcolorbox}
\begin{document}
\begin{tcolorbox}[saveto=myfile.tex, lowerbox=ignored]
This is a nice theorem
\tcblower
This is the nice prove
\end{tcolorbox}
\begin{tcolorbox}[title=A nice theorem with its prove]
\input{myfile.tex}
\end{tcolorbox}
\end{document}
在前面的代码saveto
选项中,将整个tcolorbox
内容(上部和下部)保存在文件中myfile.tex
。它仅保存内容,而不保存框的格式。
选项lowerbox=ignored
使得下部(本例中为证明)不会出现,但它会被保存。
稍后放入同一个文档,或者放入另一个文档,myfile.tex
都可以重新表述为 tcolorbox 内容。
有关这些命令的更多信息可以在tcolorbox
文档、章节4.3 Upper part
和4.4 Lower part
章节中找到更复杂的示例8. Recording
。 这里有一些例子:https://tex.stackexchange.com/a/257455/1952和
https://tex.stackexchange.com/a/224429/1952
更新
我将尝试展示https://tex.stackexchange.com/a/224429/1952也可以与外部文档一起使用。第一个文档将包含定理和证明,尽管只会打印定理,而第二个文档将显示定理和证明。此解决方案应用了一个invisible
框(blankest
命名tcolorbox
法),正如 OP 所希望的那样。
调用含有定理和证明的文档TestTheorems.tex
,其内容为:
\documentclass{article}
\usepackage{lipsum}
\usepackage[most]{tcolorbox}
\NewTColorBox[auto counter,number within=section]{theorem}{+O{}}{ %
enhanced, blankest,
coltitle=black,
title={Theorem~\thetcbcounter:},
label={theorem@\thetcbcounter},
attach title to upper=\quad,
theorem style=standard,
lowerbox=ignored,
saveto=theorems/theorem-\thetcbcounter.tex,
record={\string\proof{\thetcbcounter}{theorems/theorem-\thetcbcounter.tex}},
#1
}
\begin{document}
\section{Some theorems without proof}
\tcbstartrecording
Some theorems are shown in this document. All proofs are also written here, but not printed. They will be printed in another document.
\begin{theorem}
This is the first theorem
\tcblower
This is the proof of the first theorem\end{theorem}
\begin{theorem}
This is the second theorem
\tcblower
This is the proof of the second theorem\end{theorem}
\begin{theorem}
This is the third theorem
\tcblower
This is the proof of the third theorem\end{theorem}
\begin{theorem}
This is the fourth theorem
\tcblower
This is the proof of the fourth theorem\end{theorem}
\tcbstoprecording
\end{document}
它声明了一个theorem
tcolorbox,其内容将保存(saveto
选项)在不同的文件中,每个定理一个。这些文件的名称也记录(record
选项)到名为的辅助文件中TestTheorems.record
。此辅助文件使用命令创建\tcbstartrecording
并使用命令关闭\tcbstoprecording
。
处理此文件后结果是:
而且还有一个theorems
包含四个文件的文件夹,每个定理一个,并将文件TestTheorems.records
放入主文件夹中。
第二个文件TestProofs.tex
包含将读取所有记录的定理和证明的定义tcolorbox
。在xr
帮助下,它们将保留其原始名称和编号。命令\tcbinputrecords
声明将读取哪个文件。作为外部文件,有必要将名称作为选项指示出来。
\documentclass{article}
\usepackage{xr}
\externaldocument{TestTheorems}
\usepackage[most]{tcolorbox}
\NewTotalTColorBox{\proof}{mm}{ %
enhanced, blankest,
coltitle=black,
theorem style=plain,
title={Theorem~\ref{theorem@#1}:},
phantomlabel={proof@#1},
attach title to upper=\par,
before lower={Proof:\par}
}{\input{#2}}
\begin{document}
\section{Phnatom section}
\section{Theorems and proofs}
This document shows already printed theorems but it also includes all proofs.
\tcbinputrecords[TestTheorems.records]
\end{document}
结果是: