편지를 모아 책을 쓰는 방법

편지를 모아 책을 쓰는 방법

나는 여러 글자를 모아서 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}

그러나 다음과 같은 이유로 이 접근 방식을 사용할 수 없습니다.

  1. 각 문자는 PDF에서 가져온 것이므로 기본 문서의 다른 페이지에 삽입됩니다. 이런 식으로 새로운 장이나 섹션이 있으면 해당 페이지에는 장이나 섹션의 제목만 포함되고 다음 페이지에는 문자가 표시되므로 보기에 좋지 않습니다.

  2. 수백 개의 편지가 있을 것이고, 이는 수백 개의 짧은 별도 .tex문서가 있다는 것을 의미하며, 너무 혼란스러워지기 때문에 나는 좋아하지 않습니다. 예를 들어 단일 문서에서 검색하고 바꿀 수 없다는 의미입니다.

제가 무엇을 시도할 수 있는지 알려주세요.

답변1

이것은 매우 빠르고 간단한 솔루션이며 매우 가볍게 테스트되었습니다. 기본적으로 나는 letter.cls대부분의 코드를 잠식하여 패키지 형태로 넣었습니다. 그런 다음 letter책 내부의 환경을 사용할 수 있습니다 . letter.cls편의상 코드를 사용했습니다 . 아직 문자를 입력하지 않은 경우 클래스 코드를 직접 사용할 필요는 없지만 환경과 필요한 기타 마크업 명령( , , 및 등) 을 letter포함하는 더 간단한 패키지를 만드십시오. .) 한 가지 주의할 점: 문자에는 문자 내부에 별도의 페이지 번호가 없습니다. 예를 들어 ; 필요한 경우 메서드에 상당한 수정이 필요할 것입니다.letter\to\from\opening\closingpdfpages

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}

코드 출력

관련 정보