将整个文档写为命令

将整个文档写为命令

当撰写文档时,我喜欢使用以下格式。

%Settings for document
%Packages I need
\newcommand{\insertdocument}{
%Everything that would ordinarily be put between \begin{document} and \end{document}
}

\begin{document}
\insertdocument
\end{document}

\begin{document}制作一个只有 15 个字符的复杂文档对我来说很有吸引力\end{document}(尽管我可以用\q2 个字符来完成,但这不是重点)。

这种创建文档的方法与标准的文档制作方法相比,在编译速度、易用性或其他方面有哪些优点或缺点?

答案1

缺点:

  • \insertdocument对于长文档来说,这将是一个极长的宏,这可能会对内存使用产生影响。(小问题)

  • 定义宏会冻结输入的类别代码,因此所有涉及逐字和类似功能的功能如果尝试都会失败:

    \documentclass{article}
    \newcommand\insertdocument{%
      \begin{verbatim}
      real x;
      x = 1.0;
      \end{verbatim}
    }
    \begin{document}
    \insertdocument
    \end{document}
    

上面的评论者推荐了\include\input。为了以与您要求的相同风格实现这一点,我建议以下用法:

\begin{filecontents}{\jobname-document.tex}
\section{Introduction}
Hello
\section{Conclusion}
The end.
\end{filecontents}

\documentclass{article}
\begin{document}
\input{\jobname-document}
\end{document}

或者对于多文件书籍,说:

\begin{filecontents}{\jobname-intro.tex}
\chapter{Introduction}
Hello
\end{filecontents}

\begin{filecontents}{\jobname-concl.tex}
\chapter{Conclusion}
The End.
\end{filecontents}

\documentclass{book}
\begin{document}
\include{\jobname-intro}
\include{\jobname-concl}
\end{document}

但到那时你可能更愿意把内容分成单独的文件。

答案2

最大的缺点之一可能是类别代码的变化,因为宏替换文本的类别代码在定义时就已固定。这个缺点不是大多数人普通文档的一部分,因此可能不会改变游戏规则。

有一件事可能既不好也不坏,可能只是令人讨厌:如果你在环境中进行任何接受参数的宏(重新)定义,document你必须将#s 加倍:

\documentclass{article}

\newcommand{\abc}[1]{abc-#1}
\newcommand{\insertdocument}{%
  \abc{def} \par
  \renewcommand{\abc}[1]{ghi-##1}%
  \abc{jkl}
}
\begin{document}
\insertdocument
\end{document}

相关内容