![如何将列表环境添加到 DTX 文件](https://linux22.com/image/241418/%E5%A6%82%E4%BD%95%E5%B0%86%E5%88%97%E8%A1%A8%E7%8E%AF%E5%A2%83%E6%B7%BB%E5%8A%A0%E5%88%B0%20DTX%20%E6%96%87%E4%BB%B6.png)
我正在处理我的第一个 DTX 文件,并想添加一个代码示例,该示例将使用 打印listings
。到目前为止,这有效,但由于文档已注释,因此listings
代码使用完整的逐字输入并打印所有注释的内容。
我认为我必须尝试创建外部文件,但代码仍然必须被注释为文档的一部分。由于我肯定不是第一个处理这个问题的人,所以我想知道常见的解决方案。
答案1
就像是
% \iffalse
%<*example>
% \fi
\begin{lstlisting}
first line
second line
...
\end{lstlisting}
% \iffalse
%</example>
% \fi
应该可以工作,其中example
是一个未使用的标签(它可以用于任何这样的环境)。
阻止\iffalse...\fi
打印标签;标签本身阻止未注释的代码.sty
在之后被包含在文件中文档条加工。
答案2
我已详细介绍了如何解决这个问题我的博客。我使用该listings
包以及一些改编自listings
文档的代码:
%\lst@RequireAspects{writefile}
%\newsavebox{\LaTeXdemo@box}
%\lstnewenvironment{LaTeXdemo}[1][code and example]{^^A
% \global\let\lst@intname\@empty
% \expandafter\let\expandafter\LaTeXdemo@end
% \csname LaTeXdemo@#1@end\endcsname
% \@nameuse{LaTeXdemo@#1}^^A
%}{^^A
% \LaTeXdemo@end
%}
%\newcommand*\LaTeXdemo@new[3]{^^A
% \expandafter\newcommand\expandafter*\expandafter
% {\csname LaTeXdemo@#1\endcsname}{#2}^^A
% \expandafter\newcommand\expandafter*\expandafter
% {\csname LaTeXdemo@#1@end\endcsname}{#3}^^A
%}
%\newcommand*\LaTeXdemo@common{^^A
% \setkeys{lst}{
% basicstyle = \small\ttfamily,
% basewidth = 0.51em,
% gobble = 3,
% keywordstyle = \color{blue},
% language = [LaTeX]{TeX},
% moretexcs = {
% examplemacro,
% ^^A Add you command names here!
% }
% }^^A
%}
%\newcommand*\LaTeXdemo@input{^^A
% \MakePercentComment
% \catcode`\^^M=10\relax
% \small
% \begingroup
% \setkeys{lst}{
% SelectCharTable=\lst@ReplaceInput{\^\^I}{\lst@ProcessTabulator}
% }^^A
% \leavevmode
% \input{\jobname.tmp}^^A
% \endgroup
% \MakePercentIgnore
%}
%\LaTeXdemo@new{code and example}{^^A
% \setbox\LaTeXdemo@box=\hbox\bgroup
% \lst@BeginAlsoWriteFile{\jobname.tmp}^^A
% \LaTeXdemo@common
%}{^^A
% \lst@EndWriteFile
% \egroup
% \begin{center}
% \ifdim\wd\LaTeXdemo@box>0.48\linewidth\relax
% \hbox to\linewidth{\box\LaTeXdemo@box\hss}^^A
% \begin{minipage}{\linewidth}
% \LaTeXdemo@input
% \end{minipage}
% \else
% \begin{minipage}{0.48\linewidth}
% \LaTeXdemo@input
% \end{minipage}
% \hfill
% \begin{minipage}{0.48\linewidth}
% \hbox to\linewidth{\box\LaTeXdemo@box\hss}^^A
% \end{minipage}
% \fi
% \end{center}
%}
%\LaTeXdemo@new{code only}{^^A
% \LaTeXdemo@common
%}{^^A
%}
(这是直接从 中获取的.dtx
,因此有明显的注释字符!)然后可以将其用作
%\begin{LaTeXdemo}
% Some clever demo here
%\end{LaTeXdemo}
并将并排排版代码和代码结果。
我使用三个字符的“gobble”,因为我倾向于将代码布局为每一种环境缩进两个空格,并且还有 to %
gobble。我的演示环境还有一个可选参数,因此我可以执行以下操作
%\begin{LaTeXdemo}[code only]
% \usepackage{foo}
%\end{LaTeXdemo}
解释仅限前导的内容和类似的“显示代码但实际上不执行”的材料。
如果你有需要浮动的东西,你需要一个不同的演示,我使用额外的线设置
%\LaTeXdemo@new{code and float}{^^A
% \lst@BeginAlsoWriteFile{\jobname.tmp}^^A
% \LaTeXdemo@common
%}{^^A
% \lst@EndWriteFile
% \LaTeXdemo@input
%}
这再次设置为与环境的可选参数一起使用,并避免将浮点数放置在框内(这将失败)。