Eu gostaria de escrever um livro em LaTeX que fosse uma compilação de várias cartas.
Eu tentei a seguinte abordagem:
- O documento principal é um tipo de livro:
\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}
- Esse documento principal inclui uma página PDF obtida em
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}
No entanto, essa abordagem não é utilizável para mim pelos seguintes motivos:
Cada carta vem de um PDF, o que significa que será inserida em uma página diferente do documento principal. Desta forma, quando houver um novo capítulo ou seção, essa página conterá apenas o título do capítulo ou seção, com a letra na página seguinte, e ficará horrível.
Serão centenas de cartas, o que significa ter centenas de pequenos
.tex
documentos separados, o que não gosto porque pode ficar muito confuso. Significa, por exemplo, que não posso pesquisar e substituir em um único documento.
Por favor, deixe-me saber o que eu poderia tentar.
Responder1
Esta é uma solução muito rápida e suja, testada levemente. Basicamente, canibalizei a letter.cls
maior parte de seu código e coloquei-o em um formato de pacote. Então você pode usar o letter
ambiente dentro do seu livro. Usei o código de letter.cls
apenas por conveniência. Se você ainda não inseriu nenhuma das letras, não será necessário usar o letter
código da classe diretamente, mas crie um pacote mais simples que contenha um letter
ambiente e qualquer um dos outros comandos de marcação necessários ( \to
, \from
, \opening
e \closing
, etc. .) Uma coisa a observar: as cartas não terão números de páginas separados internos à carta como teriam se, por exemplo, você os tivesse incluído usando pdfpages
; se você precisar disso, o método precisará de alguma modificação significativa.
Se você realmente tem centenas de cartas, parece-me que seria muito melhor armazenar cada carta como um arquivo separado (basicamente apenas o letter
ambiente), controlá-las com uma planilha Excel em formato CSV e depois usar datatool
os \input
arquivos. Acho que isso tornaria o gerenciamento muito mais fácil do que um único arquivo enorme.
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
Exemplo de documento
\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}