레이아웃을 자동화하는 가장 좋은 방법

레이아웃을 자동화하는 가장 좋은 방법

저는 수업이 처음인데 문서의 전체 레이아웃을 자동화하는 수업을 만들고 싶습니다. 여기에는 다음이 포함됩니다.

  • 주어진 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
}

관련 정보