在 显示完整 LaTeX 文档的输出我提供了类似问题的部分解决方案。以下代码尝试模拟在另一个文档(例如 LaTeX 教程)中运行完整的 MWE。代码生成如下图所示的输出:
框的顶部是代码,底部是 LaTeX 输出。代码将begin{document}...\end{document}
宏置于沙盒中,以便在示例代码中禁用它们,并且仅对它们进行排版。
我正在寻找一种方法来导入包或类,并仅在示例中本地运行它们。如何实现?
一种方法是让ProvidesPackage
等...清空,禁用\@preamblecmds
并使用globaldefs
以确保代码仅在组内运行。
\documentclass{article}
\usepackage[listings]{tcolorbox}
\usepackage{amsmath,amsfonts,lipsum}
\begin{document}
\makeatletter
\gdef\@preamblecmds{}
\def\documentclass#1{}
\def\usepackage#1{}
\let\Document\document
\let\Enddocument\enddocument
\def\document{}
\def\enddocument{}
\gdef\after@@{\let\enddocument\Enddocument\let\document\Document}
\newenvironment{tex}{
\tcblisting{boxrule=1pt}}
{\endtcblisting\aftergroup\after@@}
% auto example
\begin{tex}
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\section{Introduction}
Whence we conclude that $\gamma$ is a primitive root modulo $p$. But
\begin{align*}
\gamma^{p-1}-1 &=
g^{p-1} - 1 + \frac{p-1}{1!}g^{p-2}xp +
\frac{(p-1)(p-2)}{2!}g^{p-3}x^2p^2 + \ldots \\
&= p\left(kp + \frac{p-1}{1!}g^{p-2}x +
\frac{(p-1)(p-2)}{2!}g^{p-3}x^2p + \ldots\right).
\end{align*}
\end{document}
\end{tex}
\bigskip
\lipsum[1]
\end{document}
答案1
也许您可以使用该docmute
包(最近更新)。它可以满足您的要求,尽管您仍然需要手动重置计数器。
在 MWE 中,我已经将它用于您的代码(写在主文档中),也用于从testing.tex
您应该预先创建的文件中导入的代码。
\documentclass{article}
\usepackage[listings]{tcolorbox}
\usepackage{amsmath,amsfonts,lipsum}
\usepackage{docmute}
\newenvironment{tex}
{\tcblisting{boxrule=1pt}}
{\endtcblisting\bigskip}
\newcommand{\inputtex}[1]{\tcbinputlisting{listing file=#1,boxrule=1pt}\bigskip}
\begin{document}
\begin{tex}
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\section{Introduction}
Whence we conclude that $\gamma$ is a primitive root modulo $p$. But
\begin{align*}
\gamma^{p-1}-1 &=
g^{p-1} - 1 + \frac{p-1}{1!}g^{p-2}xp +
\frac{(p-1)(p-2)}{2!}g^{p-3}x^2p^2 + \ldots \\
&= p\left(kp + \frac{p-1}{1!}g^{p-2}x +
\frac{(p-1)(p-2)}{2!}g^{p-3}x^2p + \ldots\right).
\end{align*}
\end{document}
\end{tex}
\setcounter{section}{0}
\lipsum[1]
\inputtex{testing.tex}
\lipsum[2]
\end{document}