如何将列表环境添加到 DTX 文件

如何将列表环境添加到 DTX 文件

我正在处理我的第一个 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
%}

这再次设置为与环境的可选参数一起使用,并避免将浮点数放置在框内(这将失败)。

相关内容