レイアウトを自動化する最良の方法

レイアウトを自動化する最良の方法

私はクラス初心者ですが、ドキュメントのレイアウト全体を自動化するクラスを作りたいと思っています。これには以下が含まれます:

  • 特定の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
}

関連情報