verbatim.sty 和 ltxdoc.cls 之间冲突

verbatim.sty 和 ltxdoc.cls 之间冲突

我正在编写一个使用该verbatim包的包。

\RequirePackage{verbatim}

对于文档,我使用的是ltxdoc类。所以我必须%在文档的每一行前面放一个字符。此外,当我使用环境vebatim排版代码示例时,例如

% \begin{verbatim}
% Some Code
% Some other code
% \end{verbatim}

ltxdoc删除%每行开头的所有内容,包括verbatim环境内部的所有内容。

似乎包从类中verbatim重新定义了特殊环境,因为当我写verbatimltxdoc

% \begin{verbatim}
% some code example
% some other code example
% \end{verbatim}

%生成的 PDF 中仍然存在之前Some code和之前的内容Some other code。因此,PDF 输出为

% some code example
% some other code example

但它应该是

some code example
some other code example

谁能帮我解决这个问题?

最小工作示例(MWE)

这是该文件的 MWE .dtx

% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{exercises}[2014/04/22 v1.0 .dtx exercises file]
%
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage{exercises}
\begin{document}
  \DocInput{exercises.dtx}
\end{document}
%</driver>
% \fi
% \GetFileInfo{exercises.sty}
% \title{The \textsf{exercises} package\thanks{This document
%   corresponds to \textsf{exercises}~\fileversion, dated \filedate.}}
% \author{Roger Jud}
%
% \maketitle
%
% \begin{verbatim}
% \begin{exercise}
%   Calculate $1 + 1 =$
% \end{exercise}
% \end{verbatim}
%
% \StopEventually{\PrintChanges\
%
%    \begin{macrocode}
  \RequirePackage{verbatim}
  \newenvironment{exercises}{Start}{End}
%    \end{macrocode}
% \Finale
\endinput

答案1

据我所知,环境verbatim不支持像 DTX 文件格式那样以百分号字符作为行首。可以采取以下解决方法:

  1. 环境verbatim写法不带百分比前缀:

    \begin{verbatim}
    \begin{exercise}
      Calculate $1 + 1 =$
    \end{exercise}
    \end{verbatim}
    
  2. docstrip可以通过使用未使用的保护来避免包含在生成的文件中:

    %<*verb>
    \begin{verbatim}
    \begin{exercise}
      Calculate $1 + 1 =$
    \end{exercise}
    \end{verbatim}
    %</verb>
    
  3. 但是,这种保护会干扰文档的设置。这可以通过元注释来解决,元注释也用于将驱动程序部分从文档中排除:

    % \iffalse
    %<*verb>
    % \fi
    \begin{verbatim}
    \begin{exercise}
      Calculate $1 + 1 =$
    \end{exercise}
    \end{verbatim}
    % \iffalse
    %</verb>
    % \fi
    

完整示例:

% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{exercises}[2014/04/22 v1.0 .dtx exercises file]
%
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage{exercises}
\begin{document}
  \DocInput{exercises.dtx}
\end{document}
%</driver>
% \fi
% \GetFileInfo{exercises.sty}
% \title{The \textsf{exercises} package\thanks{This document
%   corresponds to \textsf{exercises}~\fileversion, dated \filedate.}}
% \author{Roger Jud}
%
% \maketitle
%
% \iffalse
%<*verb>
% \fi
\begin{verbatim}
\begin{exercise}
  Calculate $1 + 1 =$
\end{exercise}
\end{verbatim}
% \iffalse
%</verb>
% \fi
%
% \StopEventually{\PrintChanges}
%
%    \begin{macrocode}
  \RequirePackage{verbatim}
  \newenvironment{exercises}{Start}{End}
%    \end{macrocode}
% \Finale
\endinput

结果

包裹listings

如果您考虑使用包listings,那么您可以保留百分比前缀,因为listings它可以从行首吞噬字符。以下示例使用 egreg 的逐字设置回答提问“我怎样才能让 lstlisting 看起来和逐字逐句的完全一样?”并补充道gobble=2

% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{exercises}[2014/04/22 v1.0 .dtx exercises file]
%
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage{exercises}
\usepackage{listings}
\lstnewenvironment{dtxverblisting}{%
  \lstset{
    gobble=2,
    basicstyle=\ttfamily,
    columns=fullflexible,
    keepspaces=true,
  }%
}{}
\begin{document}
  \DocInput{exercises.dtx}
\end{document}
%</driver>
% \fi
% \GetFileInfo{exercises.sty}
% \title{The \textsf{exercises} package\thanks{This document
%   corresponds to \textsf{exercises}~\fileversion, dated \filedate.}}
% \author{Roger Jud}
%
% \maketitle
%
% \begin{dtxverblisting}
% \begin{exercise}
%   Calculate $1 + 1 =$
% \end{exercise}
% \end{dtxverblisting}
%
% \StopEventually{\PrintChanges}
%
%    \begin{macrocode}
  \RequirePackage{verbatim}
  \newenvironment{exercises}{Start}{End}
%    \end{macrocode}
% \Finale
\endinput

结果

相关内容