Wie man ein Buch schreibt, das eine Zusammenstellung von Briefen ist

Wie man ein Buch schreibt, das eine Zusammenstellung von Briefen ist

Ich möchte ein Buch in LaTeX schreiben, das eine Zusammenstellung mehrerer Briefe ist.

Ich habe den folgenden Ansatz versucht:

  • Das Hauptdokument ist vom Typ Buch:

\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}
  • Dieses Hauptdokument enthält eine PDF-Seite von 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}

Dieser Ansatz ist für mich allerdings aus folgenden Gründen nicht brauchbar:

  1. Jeder Brief stammt aus einer PDF-Datei, was bedeutet, dass er auf einer anderen Seite im Hauptdokument eingefügt wird. Auf diese Weise enthält die Seite eines neuen Kapitels oder Abschnitts nur den Titel des Kapitels oder Abschnitts und der Brief befindet sich auf der nächsten Seite. Das sieht schrecklich aus.

  2. Es wird Hunderte von Briefen geben, was bedeutet, dass ich Hunderte von kurzen, separaten .texDokumenten habe, was mir nicht gefällt, weil es zu verwirrend wird. Es bedeutet zum Beispiel, dass ich in einem einzelnen Dokument nicht suchen und ersetzen kann.

Bitte lassen Sie mich wissen, was ich versuchen könnte.

Antwort1

Dies ist eine sehr schnelle und einfache Lösung, die nur sehr oberflächlich getestet wurde. Im Grunde habe ich den letter.clsgrößten Teil des Codes von ausgeschlachtet und in ein Paketformat gebracht. Dann können Sie die letterUmgebung in Ihrem Buch verwenden. Ich habe den Code von letter.clsnur aus Zweckmäßigkeitsgründen verwendet. Wenn Sie noch keine der Buchstaben eingegeben haben, müssen Sie den letterKlassencode nicht direkt verwenden, sondern ein einfacheres Paket erstellen, das eine letterUmgebung und alle anderen Markup-Befehle enthält, die Sie benötigen ( \to, \from, \openingund \closing, usw.). Eine Sache ist zu beachten: Die Buchstaben haben keine separaten Seitenzahlen innerhalb des Briefes, wie dies der Fall wäre, wenn Sie sie z. B. mit eingefügt hätten pdfpages; wenn Sie das benötigen, müsste die Methode erheblich geändert werden.

Wenn Sie wirklich Hunderte von Briefen haben, wäre es meiner Meinung nach viel besser, jeden Brief als separate Datei zu speichern (im Grunde nur die letterUmgebung), sie mit einer Excel-Tabelle im CSV-Format zu verfolgen und dann die Dateien zu verwenden datatool. \inputDies würde die Verwaltung meiner Meinung nach viel einfacher machen als eine einzelne riesige Datei.

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

Beispieldokument

\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}

Ausgabe des Codes

verwandte Informationen