我在 LaTeX 中制作了一个布局(几何图形、边距、页眉等),我需要使用同一个布局来制作多个不同的文档。所以我想知道,我是否可以创建类似模板的东西,并将其用于我拥有的每个文档,而不是复制粘贴代码的“布局部分”。
我搜索了一段时间,但没有找到任何有用的信息。有可能吗?如果可以,该怎么做?
答案1
有一个很好的介绍适用于课程和软件包编写者的 LaTeX包含大量有关该主题的信息。
正如评论中所述,您可以编写自己的样式文件甚至类。
我只能猜测,什么对你来说才是合适的选择,但我想,你的目标是你自己的风格文件。
这是一种或多或少无用的空样式。您可以随意用您的序言填充它。当然,您不需要在文件顶部添加那些广泛的注释,但请记住:记录您的想法比……更好。
此样式必须另存为empty.sty
。当然,您应该为样式指定一个更准确的名称。但是,如果您更改文件的名称,请确保也在文件中更改此名称,尤其是在命令中\ProvidesPackage
。否则 LaTeX 将抛出错误。
我定义了一个新的布尔变量@draft
。它是通过使用 style 选项draft
或final
:来设置的\usepackage[draft]{empty}
,将定义草稿模式。
该选项将交给graphicx
以此样式加载的 -package。(在您的例子中:geometry
等等。)还要注意:不要调用\usepackage
,而要说\RequirePackage
。
您还可以定义一些命令,甚至使用定义的布尔变量,正如我在此文件末尾所展示的那样。
编辑:最后再说一下文件存储位置。一般来说,将文件存储在 LaTeX 搜索和查找 tex 文件的地方是一个明智的想法。同时,我更喜欢 TeXLive,所以我的建议与 TeXLive 有关。TeXLive 区分了文件系统上的三个位置,TeX 和 LaTeX 输入可能存储在这些位置:
- 主目录,分发者在其中收集他们放入分发中的所有文件。TeXLive 将此位置的路径存储在 或
$TEXMFMAIN
中$TEXMFDIST
。 - 还有第二个位置,专门供站点范围内 TeXLive 安装的管理员使用。在此位置,管理员可以存储与其公司相关的模板、样式、字体等。TeXLive 将位置存储在 中
$TEXMFLOCAL
。 - 最后,还有一个专门供个人用户使用的位置。在此位置,您可以存储您的私人扩展,包括我的
empty.sty
。:-) TeXlive 将路径存储在 中$TEXMFHOME
。
这三个地点是在那些美好的旧时光 (tm) 中建立的,并且受到联网 UNIX 系统的巨大影响,在当时,为整个公司/大学/……配备数百台机器和数千名潜在用户安装一个 TeX 是很常见的。
如今,有了我们的个人电脑,就不再需要区分系统管理员进行的站点范围安装和用户的私人文件,因为在大多数情况下,用户与系统管理员是相同的。
不过,还有一件事值得一提。LaTeX 大量使用了大量文件。如果 LaTeX 直接在文件系统上搜索,并因此需要一遍又一遍地递归遍历数千个目录才能找到您的 ,这将大大增加系统负载,尤其是 I/O 负载。为了减轻系统负担empty.sty
,TeXLive 维护了已安装文件的数据库,并尝试在其中一个数据库中查找某个文件的位置,而不必直接在文件系统上进行痛苦的搜索。至少 、 和 中的所有文件$TEXMFMAIN
都应$TEXMFDIST
插入到其相应的数据库中。您可以通过运行或 来$TEXMFLOCAL
更新数据库。texhash
mktexlsr
鉴于以下事实:a)有许多用户,需要为他们维护单独的数据库,b)用户通常没有很多不同的 TeX 输入文件,TeXlive 通常设置为$TEXMFHOME
在文件系统上进行搜索,而不是使用数据库。
唉,将复制empty.sty
到所需位置后,您可以通过执行以下来检查 TeX 系统是否能找到样式:
kpsewhich tex empty.sty
kpsewhich
应该打印文件的正确位置。
如果没有,则说明您最终忘记更新数据库或将文件放在了错误的位置。
最后再说一句。为了在数千个属于成熟 TeX 安装的文件中保持一定的秩序,维护者和分发者很久以前就同意了一个独特的方案,即所谓的 TDS,TeX 目录结构。阅读该手册,了解如何将文件分布在所需位置。(提示:应该是$TEXMFHOME/tex/latex/telmovianavaz/empty.sty
。)
(我还纠正了 Christian Hupfer 发现的错别字。谢谢你 Christian!)
%%%
%%% @(#) empty.sty -- emty style example
%%%
%%% Time-stamp: <2017-01-28 00:45:49 tmjb>
%%%
%%%
%%% @(#) $Id: $
%%% @(#) $Keywords: emty, style for TeX.SE $
%%%
%%%
%%% File: /Users/tmjb/Desktop/LaTeX-Test/empty.sty
%%% Project: TeX.SE
%%% Description: This is an empty style file, just to answer a
%%% question at TeX.SE
%%% Version: $Revision: $
%%% Author: tmjb -- Jan Braun <[email protected]>
%%% Maintainer: tmjb -- Jan Braun <[email protected]>
%%% Creation-Date: Sat Jan 28 2017 -- Jan Braun <[email protected]>
%%% Copyright: (c) 2017 Jan Braun
%%%
%%% ------------------------------------------------------ &Change Log ---
%%%
%%% $Log: $
%%% ============================================================ &Code ===
%%% ---------------------------------------------------- &Package Name ---
% \NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{empty}[2017/01/28 TeX.SE emty style example V 0.1.1]
%%% ------------------------------------------------------- &Variables ---
%% We need some variables, to store and indicate which options (see
%% later) are choosen ...
\newif\if@draft % for Option draft
%%% --------------------------------------------------------- &Options ---
%% Options are definid by the main package or for this special style
%% file. Just add them in square brackets like this:
%% \usepackage[final,foo,bar]{empty}
%% I advise, to avoid using final and draft in package related
%% options, as the are normally handed over from the main class
%% package options.
%%
%% ............................................................ &draft ...
%% Option final is per default defined by the main class package,
%% unless you specify draft. This style defines it for continuity
%% reasons. Draft and final should be mutualy exclusive
\DeclareOption{draft}{
\@drafttrue
\PassOptionsToPackage{draft}{graphicx}
}
%% ............................................................ &final ...
%% Option final is per default defined by the main class package,
%% unless you specifyraft. This style defines it for continuity
%% reasons. Draft and final should be mutualy exclusive
\DeclareOption{final}{
\@draftfalse
\PassOptionsToPackage{final}{graphicx}
}
%% ....................................................... &Undeclared ...
%% This one is for any option, which was not declared before.
\DeclareOption*{\OptionNotUsed}
%% Set the options.
\ExecuteOptions{draft}
\ProcessOptions\relax
%%% -------------------------------------------------------- &Messages ---
%% Print out some warning messages, while compiling the text.
\if@draft
\typeout{\MessageBreak empty.sty: WARNING! DRAFT-mode is in use! \MessageBreak }
\fi
%%% -------------------------------------------------------- &Packages ---
%%
%% To get all definitions of this style to work, we need some more
%% packages. They are automatically loaded here.
%%
\RequirePackage{graphicx}
%%% ------------------------------------------------------ &Definitions ---
%%% ........................................................ &Constants ...
%%%
%%% Define some consistent strings.
\def\@totalname{Summe}
%%%
%%% Userspace command, to change the value of the above defined string.
\newcommand{\totalname}[1]{\def\@totalname{#1}}%
%% Define a command, to print nonsense, but only in draft mode.
\if@draft
\newcommand{\foo}[1][bar]{foo #1 baz}
\else
\typeout{\MessageBreak empty.sty: WARNING! FINAL-mode is in use! \MessageBreak }
\fi
\endinput
%%% ============================================================= &EOF ===
%%% Local Variables:
%%% mode: LaTeX
%%% TeX-engine: luatex
%%% TeX-master: nil
%%% TeX-parse-self: t
%%% TeX-auto-save: t
%%% End: