笔记:

笔记:

是否可以定义一组宏,将它们包含在 LaTeX 源文件中 main.tex,然后在发布后

$ latex main.tex

main.tex在文件中找到的序言,比如说main.nem

要求是,main.tex我不必触碰源代码。因此,我收到一个文件main.tex,该文件已经包含我在这个问题中要求的魔法宏。我所要做的就是编译该文件并将序言放在文件中。作者的负担main.tex不应大于包含包含魔法宏的文件。不允许要求作者使用特殊的文档类,也不允许必须编写

\begin{filecontents}...

或类似的东西。我使用他的文件的唯一痕迹是

\input{magic_macros.tex}

在他的序言中某处。

我可以用我定义的宏来做一些类似的事情,这在我的应用领域中被证明是非常有用的。

一个简化的例子是:

macros.tex

\newwrite\nemWrite
\immediate\openout\nemWrite=\jobname.nem
\newtoks\nemToks
\newcommand{\toNem}[1]{%
    \nemToks={#1}
    \immediate\write\nemWrite{\the\nemToks}
}
\newcommand{\question}[1]{%
    \toNem{#1}%
    {#1}%
}

main.tex

\documentclass{article}
\input{macros.tex}
\begin{document}
\question{%
    What does $2+2$ evaluates to?
}

我希望序言中也存在类似的内容。

答案1

您可以使用包裹standalone为您提取序言。给定如下所示的完整文档main.tex,您运行pdflatex定义mainPreamble.tex如下的:

mainPreamble.tex

\documentclass{article}
\usepackage[subpreambles=true]{standalone}

\begin{document}
    \input{main}
    \typeout{Sub preamble is now in \jobname.sta.}
    Sub preamble is now in \jobname.sta.
\end{document}

这将提取文件的序言mainPreamble.sta。然后在您需要使用此序言的其他文档中,只需使用:

\UsePackage{main}

并使用从中提取的前导码main.tex。因此,下面的 MWE 得出:

在此处输入图片描述

它使用了question中的最初定义main.tex

笔记:

  • 这需要我做一些黑客攻击,\UsePackage因为我不太熟悉这个standalone包的具体用法。所以,也许可以简化,但我相信这可以满足您的要求。

main.tex

%% This is main.tex
\documentclass{article}
%% This is the preamble of main.tex
\usepackage{amsmath}

\newcommand{\question}[1]{%
    \textbf{Question:}~#1%
}

\begin{document}
\question{%
    What does $2+2$ evaluates to?
}

代码:

以下仅运行mainPreamble.tex按需要进行编译mainPreamble.sta

\documentclass{article}

\newcommand*{\UsePackage}[1]{%
    \let\standalonepreambles\relax
    \let\endstandalonepreambles\relax
    \newcommand{\subpreamble}[1]{}
    \let\endsubpreamble\relax
    \input{#1Preamble.sta}
}%

\UsePackage{main}

\begin{document}
    \question{%
        What does $1+1$ evaluates to?
    }
\end{document}

答案2

像这样吗?

\documentclass{article}
\usepackage{filecontents}   
\begin{filecontents}{\jobname.hed}
% START YOUR HEADER HERE

\usepackage{lipsum}
\usepackage{amsmath}
% whatever you want in your header
\def\WWW{World}

% END YOUR HEADER HERE
\end{filecontents}
\input{\jobname.hed}
\begin{document}

Hello \WWW!

\lipsum

\end{document}

相关内容