许多文件,相同的序言

许多文件,相同的序言

我处理过许多文档,希望它们始终保持相同的风格。在做出设计决定时,我希望将其统一应用于所有文档。我创建了一个包含开始和结束代码的文件。然后,我的所有其他文件都只有文本和一些最少的代码(定义章节和部分等内容)。例如:

\documentclass{article}

\title{The First Document}
%\title{The Second Document}
%\title{The Third Document}

\begin{document}

    \input{document01}
    %\input{document02}
    %\input{document03}

\end{document}

要编译不同的文档,我只需将 移动%到另一行并pdflatex在该文件上运行。

  • 有没有更好的系统来管理这些?
  • 我可以放一些细节吗,比如\title每个文件开头的信息(document01.tex,等等)
  • 有没有办法可以一次性将所有文档编译为单独的 PDF?

答案1

没有必要将该\title{<title>}命令包含在主文档序言中。也就是说,您也可以将其作为文件2\title{<title>}的一部分。因此,我有以下建议或步骤顺序:document?.tex

  1. mystyle.sty通过将所有内容插入样式文件(例如1 )来创建样式。这应该包括您需要的所有内容,例如要应用于单独文档的所有包和格式。

  2. 使用通用文件名结构创建文档,例如document??.tex其中??代表分隔文档的某些标识符。

  3. 编写一个脚本,循环遍历document??.tex当前文件夹并执行

    pdflatex \documentclass{article}\usepackage{mystyle}\begin{document}\input{<doc>}\end{document}
    

    当前正在处理的文件在哪里<doc>。每次处理的输出将存储在 中article.pdf,然后您可以将其重命名/移动到<doc>.pdf。由于我运行的是 Windows,因此这里有一个可以完成此操作的最小批处理文件:

    @echo off
    for /f %%a in ('dir /b document??.tex') do (
      echo %%a
      pdflatex \documentclass{article}\usepackage{mystyle}\begin{document}\input{%%a}\end{document}
      move /y article.pdf %%~na.pdf
    )
    

    正在处理的文件列表由 给出dir /b document??.tex,其中??表示通配符(任何内容)。从页眉、页脚和所有其他与文件相关的内容中/b删除命令,从而只留下文件名。 上述脚本从称为“当前处理的文件” 开始。 然后它打印出文件名( )并在以下通用文档结构上运行:dir%%aecho %%apdflatex

    \documentclass{article}
    \usepackage{mystyle}% Your generic style file
    \begin{document}
      \input{document??}
    \end{document}
    

    最后,article.pdf将输出移至document??.pdf。其他操作系统也可以采用类似的方法。

    此过程将概括您一次创建多个文档的过程3


1这在某种程度上解决了您的第一个请求。

2这回答了您的第二个请求。

3这回答了您的第三个请求。

答案2

有没有更好的系统来管理这些?

您正在寻找的是风格文件。

创建您自己的样式文件,将其放在您的 TeX 发行版可以找到的位置,并将其加载到每个文档的前言中。

我可以添加一些详细信息吗,例如开头的 \title 信息 […]

当然,因为它属于文档(而不是样式),所以您可以像往常一样将其包含在文档中。

有没有办法可以一次性将所有文档编译为单独的 PDF?

因为你正在谈论独立的文档只遵循通用格式,没有内置的一次性编译方法。为此目的编写一个 shell 脚本。

答案3

就像 Werner 已经写过的,你可以将\title{<title>}文档文件本身放入文档中,而不是将序言放入文档中。如果你在标题中使用 babel 简写,这甚至是一个非常好的主意。否则,你必须在标题之前激活简写,在标题之后停用它。因此,建议将\title{<title>}(和\author{<author>}) 移到后面。\begin{document}

您甚至可以创建一个包装类,而不是创建包(又称样式)myclass.cls。首先要这样做:

\ProvideClass{myclass}[2011/11/07 v0.1 my first class]
\LoadClassWithOptions{article}

这样,您的类就类似于 article,因为它只是使用提供给您的类的所有选项加载 article 类。我们称这样的类为包装类

现在将文档前言中的所有内容复制到myclass.cls。接下来,您应该\usepackage\RequirePackage处替换myclass.cls。并且您应该删除包的加载,inputenc因为编码不是类的属性,而是文档的属性。因为inputenc已从您的类中删除,所以您应该将其设置为 7 位清洁。这意味着您应该例如 替换。也许也应该ä从您的类中删除。但如果该类仅支持您在那里作为选项给出的语言,则这不是必须的。\"a\RequirePackage[<language>]{babel}

最后,你应该\endinput在类文件的末尾添加。这不是必须的,但最好有。

此后,您的所有文件可能为:

\documentclass{myclass}
\usepackage{selinput}
\SelectInputMappings{
  adieresis={ä},
  germandbls={ß},
  Euro={€},
}
\usepackage[english]{babel}% use every language you want
% You need nothing else, because everything else is at `myclass.cls`.
\begin{document}
  \title{Title <nr>}
  \maketitle
  Text of document <nr>% or \input{document<nr>}
\end{document}

我使用selinput而不是inputenc,因为即使您不知道编辑器的编码,它也非常好用。

答案4

这是我对先前问题的回答的修改版本:我怎样才能将我的书分成不同的项目而不重复自己?

  1. 正如其他人提到的,将所有样式定义和包列表放在单独的文件中,MyPackages.sty并将它们包含在内\usepackage{MyPackages}。这可确保只有一个特定位置需要更改这些设置,并且会影响所有文档并确保一致性。

    MyPackages.sty还建议您包括包裹standalone也可以。这样您就可以随时编译每个章节,然后直接在主书中使用该文件。

    除了包之外,该MyPackages.sty文件还应包含所有自定义宏,可能看起来像这样:

    \usepackage{standalone}% Need standalone package
    \usepackage{…}% other packages that you use
    
    \newcommand*{}{}% All your custom macros
    

    此文件将成为您的主页。我还会包含几何学此处的边距信息、水印以及页脚、页眉等...

    此处的自定义宏也应包含您的样式定义。例如,如果您希望将关键字加粗,则应\textbf{someKeyWord}在文档中定义\newcommand*{\keyword}[1]{\textbf{#1}并使用,而不是使用。这有两个目的:阅读文档的人会知道您正在将其标识为关键字;其次,如果您决定更改关键字的格式,则只需在一个地方进行更改即可。\keyword{someKeyWord}someKeyWord

  2. 为每个章节创建单独的文件(每个documentXX文件)。以下是的示例document01.tex。请注意,这是一个完整的文件,可以自行编译:

    \documentclass{article}
    \usepackage{MyPackages}% your custom list of macros and packages
    
    % include any title information that is specific to this chapter
    \begin{document}
    \chapter{First Chapter Title}
        \section{First Section Title}
        ... contents of chapter 1 here...
    \end{document}
    

    其他章节也类似。然后你的主文件将如下所示:

    \documentclass{article}  
    \usepackage{MyPackages}% your custom list of macros and packages
    
    \begin{document}
        \input{document01}
        \input{document02}
        ...
    \end{document}
    

    假设你使用一个定义良好的命名结构,你可以使用以下方法进一步自动化 我可以根据文件系统自动加载章节和部分吗?。如果您只有几个文件,那么这可能不值得麻烦,但如果您计划继续添加新章节,则使用此方法就不需要您更新主文件。

    要记住的一件重要事情是主文件必须包含standalone包以及各个章节文件所需的所有包,并且上述结构会自动为您完成此操作。

  3. 正如其他人提到的,最好使用外部脚本来编译文档。

相关内容