Me gustaría escribir un libro en LaTeX que sea una recopilación de varias cartas.
Probé el siguiente enfoque:
- El documento principal es un tipo de libro:
\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}
- Ese documento principal incluye una página PDF obtenida de
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}
Sin embargo, este enfoque no me resulta útil por los siguientes motivos:
Cada carta proviene de un PDF, lo que significa que se insertará en una página diferente del documento principal. De esta forma, cuando haya un nuevo capítulo o sección, esa página solo contendrá el título del capítulo o sección, con la letra en la página siguiente, y se verá horrible.
Habrá cientos de cartas, lo que significa tener cientos de
.tex
documentos breves separados, lo cual no me gusta porque resultaría demasiado confuso. Significa, por ejemplo, que no puedo buscar y reemplazar en un solo documento.
Por favor, déjame saber qué podría probar.
Respuesta1
Esta es una solución muy rápida y sucia, que se ha probado muy ligeramente. Básicamente, canibalicé la letter.cls
mayor parte de su código y lo puse en forma de paquete. Luego puedes usar el letter
entorno dentro de tu libro. He usado el código de letter.cls
solo por conveniencia. Si aún no ha ingresado ninguna de las letras, entonces no necesita usar el letter
código de clase directamente, pero cree un paquete más simple que contenga un letter
entorno y cualquiera de los otros comandos de marcado que necesitaría ( \to
,, y , etc. .) Una cosa a tener en cuenta: las cartas no tendrán números de página separados dentro de la carta como lo tendrían si, por ejemplo, los hubiera incluido usando ; si es necesario, el método necesitaría alguna modificación significativa.\from
\opening
\closing
pdfpages
Si realmente tiene cientos de letras, me parece que sería mucho mejor almacenar cada letra como un archivo separado (básicamente solo el letter
entorno), realizar un seguimiento de ellas con una hoja de cálculo de Excel en formato CSV y luego usarlas datatool
en \input
los archivos. Creo que esto haría la gestión mucho más fácil que un único archivo 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
Documento de muestra
\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}