我在 LaTeX 中製作了一個佈局(幾何、邊距、標題等),我需要使用相同佈局的多個不同文件。所以我想知道是否可以創建類似模板的東西,並在我擁有的每個文件上使用它,而不是複製貼上程式碼的「佈局部分」。
我搜尋了一段時間但找不到任何有用的東西。是否可以?如果是這樣,該怎麼辦?
答案1
有一個很好的介紹供類別和套件編寫者使用的 LaTeX有很多關於該主題的資訊。
正如評論中所述,您可以編寫自己的樣式文件甚至類別。
我只能猜測,什麼是適合您的選擇,但我猜,您的目標是您自己的樣式檔案。
這是一種多礦石少無用的空風格。請隨意填寫您的序言。當然,您不需要在文件頂部添加大量註釋,但請記住:最好記錄您的想法,而不是...
該樣式必須另存為empty.sty
.當然,您應該為您的樣式指定一個更逐字的名稱。但是,如果您更改文件的名稱,請務必在文件中也更改此名稱,尤其是在命令中\ProvidesPackage
。否則 LaTeX 將拋出錯誤。
我定義了一個新的布林變數@draft
。它是透過使用 style 選項來設定的draft
,或final
:\usepackage[draft]{empty}
定義草稿模式。
此選項交給-package graphicx
,並由該樣式載入。 (在您的情況下: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 直接在文件系統上搜索,並因此一遍又一遍地遞歸遍歷所有數千個目錄,只是為了找到您的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: