Cómo escribir un libro que sea una recopilación de cartas

Cómo escribir un libro que sea una recopilación de cartas

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:

  1. 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.

  2. Habrá cientos de cartas, lo que significa tener cientos de .texdocumentos 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.clsmayor parte de su código y lo puse en forma de paquete. Luego puedes usar el letterentorno dentro de tu libro. He usado el código de letter.clssolo por conveniencia. Si aún no ha ingresado ninguna de las letras, entonces no necesita usar el lettercódigo de clase directamente, pero cree un paquete más simple que contenga un letterentorno 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\closingpdfpages

Si realmente tiene cientos de letras, me parece que sería mucho mejor almacenar cada letra como un archivo separado (básicamente solo el letterentorno), realizar un seguimiento de ellas con una hoja de cálculo de Excel en formato CSV y luego usarlas datatoolen \inputlos 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}

salida de código

información relacionada