我是課程新手,我想建立一個自動完成文件佈局的課程。這包括 :
- 將給定的 pdf 檔案設定為背景,
- 標題頁的背景與文件其餘部分的背景不同,
- 文件 ID 和文件名稱應位於標題頁和後續頁的頁首。
我設法把背景放上去,沒問題。但經過幾個小時的搜索,我找不到一種方法來自動預先填充重複文字(例如 ID 和主題)。
my_class.cls
這是我的文件的簡約工作範例:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{my_class}[2023/03/10 A document class for my compagny documents]
\LoadClass[a4paper, 12pt]{article}
\usepackage{fancyhdr}
\RequirePackage{palatino}
\RequirePackage{mathpazo}
\RequirePackage[T1]{fontenc}
\RequirePackage[french]{babel}
\RequirePackage[left=2.5cm, right=2.5cm, top=2.4cm, bottom=2.5cm]{geometry}
% The background
\RequirePackage[pages=1]{background}
\backgroundsetup{scale = 1.01, angle = 0, opacity = 1,
contents = {
\ifnum\thepage = 1 \includegraphics[width = \paperwidth, height = \paperheight, keepaspectratio]{bg_title.pdf}
\else \includegraphics[width = \paperwidth, height = \paperheight, keepaspectratio]{bg_all.pdf}
\fi}}
\pagestyle{fancy}
\renewcommand\headrulewidth{0pt}
\fancyhf{}
\fancyfootoffset[R]{-0.35cm}
\fancyfoot[R]{\color{white}\vspace{-0.05cm}\textbf{\thepage}}
\fancyheadoffset[R]{-0.30cm}
\fancyhead[R]{document_name \hspace{0.5cm}\textbf{\color{white}document_ID}}
% Title page
\AtBeginDocument{
\thispagestyle{empty}
\begin{center}
\vspace*{0.15\textheight}
\textbf{\huge document_ID -- client}
\vspace{0.8cm}
\textbf{\huge project_name}
\vspace{0.8cm}
\includegraphics[width=0.4\textwidth]{title_page_logo}
\vspace{0.8cm}
\textbf{\huge document_name}
\vfill
This document is confidential
\vspace{0.8cm}
Date de la dernière mise à jour du document : \today \\
Rédacteur(s) du document : redactor
\end{center}
\newpage
\tableofcontents
\newpage
}
在我的tex
檔案中,
\documentclass{my_class}
\begin{document}
Hello world!
\end{document}
因此,在我的文件中,基本佈局已經存在(背景、標題等),但是,您可以在文件中看到cls
一些取決於文件的資訊:
document_ID
(標題和扉頁)document_name
(標題和扉頁)client
(封面)project_name
(封面)title_page_logo
(封面)redactor
(封面)
(對我們來說,自動化這類東西很重要=>所有文檔都將具有完全相同的佈局,如果您不輸入所有信息,則會出現錯誤並且無法編譯文檔)。
我搜尋類似當你調用時\author{...}
,\document_ID{ID 1235}
例如調用,但它不是透過類別來工作的。
有沒有辦法做類似的事情?或至少在 tex 檔案中使用 :\documentclass[document_ID=ID 1235,...]{my_class}
或類似的東西呼叫類別?
我讀了很多關於 的內容\DeclareOptions
,但我不確定它是否適合像這裡這樣的“字串輸入”! (或者我只是不明白它是如何工作的)。
感謝您的幫忙!
答案1
讓我詳細闡述 John Kormylo 的評論。以下內容應該符合您的預期,並且不會使您的主文件變得臃腫。您只需在主文件的開頭定義一些值(文檔 ID、文檔名稱等)並匯入.tex
包含通用內容的文件。不需要花俏的課程或類似的東西。
main.tex
\documentclass[a4paper]{article}
% Fill in these information. Just do it!
\newcommand{\myDocID}{ID~0123456789}
\newcommand{\myDocName}{Important Document}
\newcommand{\myClient}{Claire Client}
\newcommand{\myProjName}{Important Project}
\newcommand{\myTitleLogo}{example-image-duck}
\newcommand{\myEditor}{Ph.\,D.~Eddy Editor}
% Additional packages.
\usepackage{lipsum} % Just to have some blindtext.
% Input generic setup stuff.
\input{genericSetup.tex}
% Start of document.
\begin{document}
\lipsum
\end{document}
genericSetup.tex
% Necessary packages. If you need to load any package with certain options, e.g. `\usepackage[draft]{graphicx}`, make sure you have this line *before* `\input`ting this code.
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{eso-pic}
% Apply `fancyhdr` stuff.
\pagestyle{fancy}
\renewcommand\headrulewidth{0pt}
\fancyhf{}
\fancyfootoffset[R]{-0.35cm}
\fancyfoot[R]{\color{white}\vspace{-0.05cm}\textbf{\thepage}}
\fancyheadoffset[R]{-0.30cm}
\fancyhead[R]{\myDocName \hspace{0.5cm}\textbf{\color{white}\myDocID{}}}
% Define behavior at start of the document.
\AtBeginDocument{
% Create titlepage.
\begin{titlepage}
\centering
\ClearShipoutPicture
\AddToShipoutPictureBG*{\includegraphics[width=\paperwidth,height=\paperheight]{example-image-a}}% replace with a fixed titlepage background image
\vspace*{0.15\textheight}
\textbf{\huge \myDocID{} -- \myClient}
\vspace{0.8cm}
\textbf{\huge \myProjName}
\vspace{0.8cm}
\includegraphics[width=0.4\textwidth]{\myTitleLogo}
\vspace{0.8cm}
\textbf{\huge \myDocName}
\vfill
This document is confidential.
\vspace{0.8cm}
Date de la dernière mise à jour du document : \today \\
Rédacteur(s) du document: \myEditor
\end{titlepage}
% Define background for non-titlepage pages *after* printing the titlepage.
\AddToShipoutPictureBG{\includegraphics[width=\paperwidth,height=\paperheight]{example-image-b}}% replace with a fixed titlepage background image
}