具有逐字环境的 LaTeX 文档

具有逐字环境的 LaTeX 文档

我正在尝试记录一些有关边距的 LaTeX 宏。我认为记录的一个好方法是将 LaTeX 代码放在背面,将输出放在正面。所以我想出了这个 MWE:

\documentclass{article}

\usepackage{lipsum}
\usepackage{verbatim}

\newenvironment{documentationpage}%
{\endgraf\verbatim}%
{\endverbatim}

\begin{document}
%
\begin{documentationpage}
This is a sentence explaining the footnote macro.\footnote{This is a footnote.}
This is a sentence explaining the footnote macro.\footnote{This is a footnote, too.}
\end{documentationpage}
%
\end{document}

现在,我想This is a sentence...footnote, too.}先使用框架环境进行排版,然后再不使用框架documentationpage环境进行排版。

因此,输出应该类似于

\begin{documentationpage}
    This is a sentence explaining the footnote macro.\footnote{This is a footnote.}
    This is a sentence explaining the footnote macro.\footnote{This is a footnote, too.}
\end{documentationpage}
\newpage
    This is a sentence explaining the footnote macro.\footnote{This is a footnote.}
    This is a sentence explaining the footnote macro.\footnote{This is a footnote, too.}
\newpage

我可以用 (Lua-)LaTeX 实现这个吗?

答案1

有一个showexpl包允许显示代码和结果。您可以重新定义其样式以添加\newpage

另一个包ydoc-expl来自我的ydoc包。但它仍处于 alpha 阶段。您可以重新定义\PrintExample以更改代码示例的显示方式。对于您的应用程序,您可以使用以下代码。

该包将代码存储到外部文件中,可以使用例如将其作为代码包含\lstinputlisting或使用排版\input

\documentclass{article}
\usepackage{ydoc-expl}

\lstdefinestyle{examplecode}{%
    basicstyle=\ttfamily\small,
    breaklines,
    numbers=none,language=tex,
}

\makeatletter
\def\PrintExample{%
  \lstinputlisting [style=examplecode]{\ydoc@exafile}
  \newpage
  \noindent
  \input{\ydoc@exafile}%
  \newpage
}
\makeatother
\begin{document}

\begin{examplecode}
    This is a sentence explaining the footnote macro.\footnote{This is a footnote.}
    This is a sentence explaining the footnote macro.\footnote{This is a footnote, too.}
\end{examplecode}


\end{document}

更新:

这里提取并修改了底层代码,以便您拥有所请求的环境名称:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{listings}
\makeatletter
\lst@RequireAspects{writefile}

\lstdefinestyle{documentationpage}{%
  basicstyle=\ttfamily\scriptsize,
  breaklines,
  language=[latex]tex,
}


\lstnewenvironment{documentationpage}{%
  \setbox\@tempboxa\hbox\bgroup% to avoid any spaces sneaking in
  %\lstset{gobble=2}% settings for code extraction
  \lst@BeginWriteFile{\jobname.dpg}%
}{%
  \lst@EndWriteFile
  \egroup
  \endgraf\noindent
  \lstinputlisting[style=documentationpage]{\jobname.dpg}%
  \newpage
  \input{\jobname.dpg}%
  \newpage
}
\makeatother

\begin{document}

\begin{documentationpage}
This is a sentence explaining the footnote macro.\footnote{This is a footnote.}
This is a sentence explaining the footnote macro.\footnote{This is a footnote, too.}
\end{documentationpage}

\end{document}

结果(针对所示的两种实现)

结果

相关内容