我想用 LaTeX 寫一本由幾封信組成的書。
我嘗試了以下方法:
- 主要文件是書籍類型:
\documentclass[a4paper,12pt,twoside]{book}
\usepackage[utf8]{inputenc}
\usepackage[spanish,es-tabla]{babel}
\usepackage[T1]{fontenc}
\usepackage{pdfpages}
\usepackage{listings}
\usepackage{fancyhdr}
\title{TITLE}
\author{ME}
\date{}
\begin{document}
\maketitle
\tableofcontents
\chapter{1942}
\section{Julio}
\includepdf[pages=-,pagecommand=\thispagestyle{fancy}]{Carta1}
\end{document}
- 此主文檔包括從以下位置取得的 PDF 頁面
Carta1.tex
:
\documentclass[a4paper,12pt]{letter}
\longindentation=0pt
\usepackage[utf8]{inputenc}
\usepackage[spanish,es-tabla]{babel}
\signature{Me}
\address{This place}
\date{1 1 1111}
\begin{document}
\begin{letter}{}
\opening{Dear you:}
\dots
\closing{Bye,}
\ps{PS}
\end{letter}
\end{document}
然而,由於以下原因,這種方法對我來說不可用:
每封信都來自 PDF,這意味著它將插入到主文件的不同頁面中。這樣,當有新的章節或章節時,該頁面將只包含該章節或章節的標題,字母在下一頁,看起來很糟糕。
會有數百封信,這意味著有數百份簡短的獨立
.tex
文件,我不喜歡這樣,因為它會變得太混亂。這意味著例如我無法在單一文件中搜尋和替換。
請讓我知道我可以嘗試什麼。
答案1
這是一個非常快速且骯髒的解決方案,經過了非常簡單的測試。基本上我已經拆解了它letter.cls
的大部分程式碼並將其放入包形式中。然後你就可以使用letter
書中的環境了。我使用代碼letter.cls
只是為了方便。如果您還沒有輸入任何字母,那麼您無需letter
直接使用類別代碼,而是製作一個包含letter
環境的更簡單的包,以及您需要的任何其他標記命令(\to
、\from
、\opening
和\closing
等) 。 :信件內部不會有單獨的頁碼,例如,您使用pdfpages
;包含它們。如果您需要該方法,則需要進行一些重大修改。
如果您確實有數百個字母,在我看來,最好將每個字母儲存為單獨的檔案(基本上只是環境letter
),使用 CSV 形式的 Excel 電子表格追蹤它們,然後使用datatool
這些\input
檔案。我認為這將使管理比單一巨大文件容易得多。
letter-package.sty
\ProvidesPackage{letter-package}[2019/08/09 package version of letter.cls]
% The following code is taken directly from the letter.cls
% The {letter} environment has been simplified for inclusion into another document
% Proof of concept. Very lightly tested. Use at your own risk.
% It’s likely this code could be simplified further but using the actual code
% from the class allows a kind of backwards compatibility.
%
\newenvironment{letter}[1]
{\@processto{\leavevmode\ignorespaces #1}}
{\par}
\long\def\@processto#1{%
\@xproc #1\\@@@%
\ifx\toaddress\@empty
\else
\@yproc #1@@@%
\fi}
\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}
\DeclareRobustCommand\@nobreakvspace
{\@ifstar\@nobreakvspacex\@nobreakvspacex}
\def\@nobreakvspacex#1{%
\ifvmode
\nobreak\vskip #1\relax
\else
\@bsphack\vadjust{\nobreak\vskip #1}\@esphack
\fi}
\def\@nobreakcr{\@ifstar{\@normalcr*}{\@normalcr*}}
\newdimen\longindentation
\longindentation=.5\textwidth
\newdimen\indentedwidth
\indentedwidth=\textwidth
\advance\indentedwidth -\longindentation
\newcommand*{\name}[1]{\def\fromname{#1}}
\newcommand*{\signature}[1]{\def\fromsig{#1}}
\newcommand*{\address}[1]{\def\fromaddress{#1}}
\newcommand*{\location}[1]{\def\fromlocation{#1}}
\newcommand*{\telephone}[1]{\def\telephonenum{#1}}
\name{}
\signature{}
\address{}
\location{}
\telephone{}
\newcommand*{\opening}[1]{\ifx\@empty\fromaddress
{\raggedleft\@date\par}%
\else % home address
{\raggedleft\begin{tabular}{l@{}}\ignorespaces
\fromaddress \\*[2\parskip]%
\@date \end{tabular}\par}%
\fi
\vspace{2\parskip}%
{\raggedright \toname \\ \toaddress \par}%
\vspace{2\parskip}%
#1\par\nobreak}
\newcommand{\closing}[1]{\par\nobreak\vspace{\parskip}%
\stopbreaks
\noindent
\ifx\@empty\fromaddress\else
\hspace*{\longindentation}\fi
\parbox{\indentedwidth}{\raggedright
\ignorespaces #1\\[6\medskipamount]%
\ifx\@empty\fromsig
\fromname
\else \fromsig \fi\strut}%
\par}
\medskipamount=\parskip
\newcommand*{\cc}[1]{%
\par\noindent
\parbox[t]{\textwidth}{%
\@hangfrom{\normalfont\ccname: }%
\ignorespaces #1\strut}\par}
\newcommand*{\encl}[1]{%
\par\noindent
\parbox[t]{\textwidth}{%
\@hangfrom{\normalfont\enclname: }%
\ignorespaces #1\strut}\par}
\newcommand*{\stopbreaks}{%
\interlinepenalty\@M
\def\par{\@@par\nobreak}%
\let\\\@nobreakcr
\let\vspace\@nobreakvspace}
\DeclareRobustCommand\@nobreakvspace
{\@ifstar\@nobreakvspacex\@nobreakvspacex}
\def\@nobreakvspacex#1{%
\ifvmode
\nobreak\vskip #1\relax
\else
\@bsphack\vadjust{\nobreak\vskip #1}\@esphack
\fi}
\def\@nobreakcr{\@ifstar{\@normalcr*}{\@normalcr*}}
\newcommand*{\startbreaks}{%
\let\\\@normalcr
\interlinepenalty 200%
\def\par{\@@par\penalty 200\relax}}
\newcommand*{\ps}{\par\startbreaks}
\newcommand*{\stopletter}{}
\newcommand*{\returnaddress}{}
\newcommand*{\ccname}{cc}
\newcommand*{\enclname}{encl}
\newcommand*{\pagename}{Page}
\newcommand*{\headtoname}{To}
\endinput
樣本文件
\documentclass[a4paper]{book}
\usepackage[margin=2cm]{geometry}
\usepackage{letter-package}
\usepackage{kantlipsum}
\begin{document}
\chapter{A chapter}
\begin{letter}{}
\signature{Me}
\address{This place}
\date{1 1 1111}
\opening{Dear you:}
\kant[1]
\closing{Bye,}
\ps{PS}
\end{letter}
\begin{letter}{}
\signature{Someone}
\address{That place}
\date{2 2 2222}
\opening{Dear person:}
\kant[2]
\closing{Yours truly,}
\ps{PS}
\end{letter}
\end{document}