当撰写文档时,我喜欢使用以下格式。
%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}
(尽管我可以用\q
2 个字符来完成,但这不是重点)。
这种创建文档的方法与标准的文档制作方法相比,在编译速度、易用性或其他方面有哪些优点或缺点?
答案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}