저는 수업이 처음인데 문서의 전체 레이아웃을 자동화하는 수업을 만들고 싶습니다. 여기에는 다음이 포함됩니다.
- 주어진 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
}