![您能帮助我优化/改进这个用于短篇小说选集的 LaTeX 书籍模板吗?](https://linux22.com/image/359997/%E6%82%A8%E8%83%BD%E5%B8%AE%E5%8A%A9%E6%88%91%E4%BC%98%E5%8C%96%2F%E6%94%B9%E8%BF%9B%E8%BF%99%E4%B8%AA%E7%94%A8%E4%BA%8E%E7%9F%AD%E7%AF%87%E5%B0%8F%E8%AF%B4%E9%80%89%E9%9B%86%E7%9A%84%20LaTeX%20%E4%B9%A6%E7%B1%8D%E6%A8%A1%E6%9D%BF%E5%90%97%EF%BC%9F.png)
背景 我对 LaTeX 不是很熟悉,但我希望使用它来创建 PDF,这样我们就可以自行出版短篇小说选集(以前我们小组使用 MS Word,但这真的很痛苦;现在我们希望使用潘多克将 .docx 转换为 .html;将 .html 转换为 markdown;将 markdown 转换为 LaTeX)。在过去几周里,我浏览了 tex.stackexchange.com、reddit.com/r/latex、CTAN 和各种博客文章,寻找有关使用模板的建议。看起来很多人推荐回忆录文档类,但是回忆录看起来非常复杂。我最终从书并且我添加了各种解决方案以试图适应我们正在编写多作者短篇小说选集的事实(因此最好将故事标题和故事作者放在目录、页面标题和每个故事的标题页中)。
我需要什么帮助 我拥有的模板似乎可以满足我们的需求,但我感觉就像弗兰肯斯坦在建造他的怪物——我并不真正了解 LaTeX 的所有工作原理。我只是复制/粘贴(做了一些调整)来创建以下模板。所以我希望你们中一些更有知识的人可以快速浏览一下这个模板,看看是否有一些冗余,哪些事情可以做得更干净,或者哪些事情可以做得正确(与我现在的做法相比)。
模板:
% ==========================================================================================
% SIMPLE NOVEL TEMPLATE for LaTeX
% Also good for short story anthologies
% 6" x 9" with bleed
% Built by NewMexicoKid 2017-08-05
% based on the answer by https://tex.stackexchange.com/users/30640/user12711
% Ref: https://tex.stackexchange.com/questions/66902/latex-template-for-typesetting-a-novel
% ==========================================================================================
\documentclass[12pt,twoside,openright]{book}
\usepackage[paperwidth=6.125in,paperheight=9.25in,top=69.0pt,bottom=66.0pt,headsep=21pt,headheight=66.0pt,outer=36pt,inner=53pt]{geometry}
\usepackage{textcomp}
\usepackage{verse} % for poetry, but you need to end each line with \\
\usepackage{alltt} % for PRE-formatted poetry
%-------------------------------------------------------------------------------
\usepackage[no-math]{fontspec} % Lets one use system fonts (but with no math)
\setmainfont{EBGaramond} % EBGaramond font; this is the free Garamond clone
\usepackage{anyfontsize}
%-------------------------------------------------------------------------------
\usepackage{titlesec}
% remove chapter name and number: http://blog.chapagain.com.np/latex-remove-chapter-name-and-number/
\titleformat{\chapter}[display]
{\normalfont\bfseries}{}{0pt}{\Huge}
\usepackage{fancyhdr} % fancy headers
\usepackage{microtype} % use this to improve typography
\usepackage{hyphenat}\hyphenation{my-word, hyphen-ate, never, hyphen}
\usepackage[english]{babel} % - for lorem ipsum
\usepackage{blindtext} % -- just for lorem ipsum
\usepackage{setspace}\onehalfspacing\frenchspacing\flushbottom\sloppy
% https://tex.stackexchange.com/questions/65355/flushbottom-vs-raggedbottom
\setstretch{1.15}
\setlength{\dimen0}{\textheight}
\addtolength{\dimen0}{-\topskip}
\divide\dimen0\baselineskip
\setlength{\textheight}{\number\dimen0 \baselineskip}
\addtolength{\textheight}{\topskip}
\usepackage[normalem]{ulem} % Needed for \sout (strikeout)
\usepackage{suffix} % Needed for different chapter headings
\usepackage[english]{babel}
% --------------------------------------------------------------------------
% hyperlinks for the e-book and PDF
\usepackage{hyperref}
\usepackage{color}
\definecolor{Blue}{RGB}{4, 6, 145}
\hypersetup{colorlinks,linktocpage,linktoc=all,linkcolor=Blue,urlcolor=Blue}
% --------------------------------------------------------------------------
\usepackage{etoc}% only so far to enable multiple uses of "\tableofcontents"
% maybe the document class already allows it.
\usepackage{emptypage} % No headers on empty pages
\DeclareRobustCommand*\AUTHOR [1]{}
\newcommand\SHOWAUTHORS {%
\DeclareRobustCommand*\AUTHOR [1]{{\normalfont\small\itshape ##1}}}
% =========================================================================================
% https://tex.stackexchange.com/questions/156862/displaying-author-for-each-chapter-in-book
% The following code not only displays chaptername and author in the TOC but also at the
% start of each chapter.
\makeatletter
\newcommand\smallcaps[1]{\textsc{#1}}
\newcommand\newchapter[2] {\gdef\@chaptertitle{#1}\gdef\@chapterauthor{#2}\chapter[#1 / \AUTHOR{#2}]{#1}\printchapterauthor{#2}}
\def\@chapterauthor{}
\def\@chaptertitle{}
\fancypagestyle{mystyle}{%
\fancyhf{}%
\fancyhead[LE]{\thepage\quad\smallcaps{\@chaptertitle}}%
\fancyhead[RO]{\smallcaps{\@chapterauthor}\quad\thepage}%}
\renewcommand{\chaptermark}[1]{\markboth{##1}{}}%
}
\makeatother
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\setcounter{secnumdepth}{0}
\renewcommand{\chaptername}{}
\renewcommand{\thechapter}{}
\setcounter{chapter}{-1}
\makeatletter
\newcommand{\printchapterauthor}[1]{%
{\parindent0pt\vspace*{-25pt}%
\linespread{1.1}\large\scshape#1%
\par\nobreak\vspace*{35pt}}
\@afterheading%
}
\makeatother
% =========================================================================================
% ---------------------------------------------
% Fancy headers with story name and author
% Refers back to mystyle defined above
% ---------------------------------------------
\pagestyle{mystyle} %fancy
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
% ---------------------------------------------
% ========================================================================
% Needed for scene breaks with a "flowerleft" flourish
\usepackage{adforn}
% \Scene macro is used for scene breaks * * * * *
\makeatletter
\newcommand{\Scene}{%
\par\nobreak\@afterheading
\vspace{\topsep}
\addvspace{\topsep\relax}
\noindent\hfil%
\adfflourishleftdouble\quad\adfflowerleft\quad\adfflourishrightdouble
\hfil\par%
\vspace{\topsep}
\@afterindentfalse\@afterheading%
}
\makeatother
% ========================================================================
% ---------------------------------------------------------------------------
% use begin{itpars} ... end{itpars} around blocks of text to be italicized
% https://tex.stackexchange.com/questions/258394/make-block-of-text-italicized
\newenvironment{itpars}
{\par\itshape}
{\par}
% ---------------------------------------------------------------------------
% ===============================================================
% Provide the author, title and date for the title page
\author{Author Name} \title{Anthology or Novel Title} \date{2017-08-05}
% ===============================================================
\begin{document}
\frontmatter % the front of the book has (lowercase) roman numerals
\SHOWAUTHORS
% \tableofcontents
% -------------------------------------
% Front matter pages
\thispagestyle{empty}
% \begin{figure}[htbp]
% \centering
% \includegraphics[width=3.2in]{title_image.png}
% \end{figure}
\begin{center}
\fontsize{50}{60}\selectfont ANTHOLOGY TITLE
\end{center}
\vspace{1.0in}
\begin{center}
\Huge{Author Name}
\end{center}
% \vspace{1.1in}
\vfill
\begin{center}
\emph{\large{06 August 2017}}
\end{center}
\clearpage
\vspace*{4.5cm}
\begin{center}
\Huge{\textsc{Interior Book Title}}
\end{center}
\vspace{2em}
{\parindent0pt % no indentation for this section
Written by Author Name
\vspace{2em}
Copyright \textcopyright 2017 by Author Name
All rights reserved. Printed in the United States of America. No part of
this book may be used or reproduced in any manner whatsoever without
written permission except in the case of brief quotations embodied in
critical articles and reviews.
\vspace{2em}
ISBN XXX TO BE FILLED IN
% \vspace{2em}
\vfill
Cover Design by A Book Cover Designer
} %end no indent
\clearpage
\emph{This page constitutes a continuation of the copyright page.}
\begin{center}
\emph{Story One} copyright \textcopyright 2017 by Author Name
\emph{Story Two} copyright \textcopyright 2017 by Other Author
\end{center}
\clearpage
\tableofcontents
\clearpage
\section{Acknowledgements}\label{acknowledgements}
The Editors of this anthology would like to thank folks.
\section{Introduction}\label{introduction}
\Blindtext
\Blindtext
% -------------------------------------
% \chapter*{Foreword} % \chapter* (* excludes from Contents)
\section{Foreward}\label{Foreward}
% \input{Foreword.tex}\clearpage
\Blindtext
\mainmatter % the main part of the book will have standard pages
%
% ======================================================================
%
% Import the chapters; specify chapter title and author with \newchapter
%
\part{Book One}
\newchapter{Story One}{Author One}
% \input{Story_One}
\Blindtext\clearpage
\Blindtext\clearpage
\Blindtext\clearpage
\clearpage
\newchapter{Story Two}{Author Two}
% \input{Story_Two}
\Blindtext\clearpage
\Blindtext\clearpage
\Blindtext\clearpage
\clearpage
\part{Book Two}
\newchapter{Story Three}{Author One}
% \input{Story_One}
\Blindtext\clearpage
\Blindtext\clearpage
\Blindtext\clearpage
\clearpage
\newchapter{Story Four}{Author Three}
% \input{Story_Two}
\Blindtext\clearpage
\Blindtext\clearpage
\Blindtext\clearpage
\clearpage
% ======================================================================
\end{document}
PDF 版本由模板生成。
答案1
\sloppy
你不想要这个。
\setstretch{1.15}
这并没有错,但它与 相矛盾\onehalfspacing
。因此,删除您不想要的部分。
\setlength{\dimen0}{\textheight}
\addtolength{\dimen0}{-\topskip}
\divide\dimen0\baselineskip
\setlength{\textheight}{\number\dimen0 \baselineskip}
\addtolength{\textheight}{\topskip}
这在很多方面都是不好的。您将 TeX 尺寸视为 LaTeX 长度。这可能不会导致错误,但非常令人讨厌。然而,真正的问题是,您正在背着 偷偷摸摸地在geometry
它正在写的这本书上喷漆涂鸦。
如果您要求geometry
管理页面布局尺寸,则必须仅使用geometry
的命令更改这些尺寸。否则,它不可能知道尺寸应该是多少。geometry
建议使用标准类。但如果您不想使用它,请不要加载它。不要请它吃饭然后往汤里吐口水。
您正在多次加载包。不要这样做。例如,babel
被加载了多次。
如果需要,请指定英语变体 -例如,british
使用 和 使用 时,排版会有所不同american
。如果不同的作者使用不同的英语变体,则您有一个多语言文档,需要适当切换语言。
除极少数例外,hyperref
必须加载最后的。您加载得太早了。
考虑使用xcolor
而不是color
。
如果您使用titlesec
,请使用它来格式化所有章节标题。如果您不想这样做,请不要加载它。
\newcommand\smallcaps[1]{\textsc{#1}}
你为什么要这样做?没有理由这样做,而且有很多理由不这样做。\textXX
宏没有定义为常规\newcommand
宏,这是有原因的。此外,这实际上使得更多的打字,会使人们更难帮助您或理解您的代码。
\def\@chapterauthor{}
\def\@chaptertitle{}
不要这样做。使用
\newcommand\@chapterauthor{}
\newcommand\@chaptertitle{}
然后使用\renewcommand
来更改它们。\def
如果您覆盖现有宏,无论它多么重要,都不会给您警告。它不进行检查。除非您想自己进行检查,否则请使用\newcommand
which 来为您检查。(您想如果您无意中尝试覆盖现有命令,则会出现错误!)
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
您想要续订几次?
\renewcommand{\thechapter}{}
\setcounter{chapter}{-1}
你确定吗?这也许有原因,但看起来很奇怪。
\usepackage{adforn}
我想,对此我没什么可抱怨的。
\newcommand{\Scene}{%
\par\nobreak\@afterheading
\vspace{\topsep}
\addvspace{\topsep\relax}
\noindent\hfil%
\adfflourishleftdouble\quad\adfflowerleft\quad\adfflourishrightdouble
\hfil\par%
\vspace{\topsep}
\@afterindentfalse\@afterheading%
}
换行符是一个空格。宏名会占用空格。右花括号不会。您很可能会通过注释不需要的行而不注释需要的行来引入不想要的空格。
\Huge{Author Name}
\emph{\large{06 August 2017}}
\Huge{\textsc{Interior Book Title}}
\Huge
等是开关。它们不接受参数。
\Huge Author Name
\emph{\large 06 August 2017}
\Huge \textsc{Interior Book Title}
是等效的,而且更加清晰。
答案2
请查看“novel”文档类。它与 TeXLive 2016 及更高版本兼容。它不是默认 TeX 发行版的一部分,您必须请求添加它。
该软件包仅使用 LuaLaTeX,仅使用 UTF-8 编码。您不需要了解 Lua。使用具有所需功能的 Open Type 字体。本质上是多语言的。
小说课是专门为小说而开设的,可以是小说,也可以是短篇小说集。附有详尽的文档,包括对 POD 课程中你应该知道的一些事情的讨论
并且,它具有内置的 PDF/X 功能,已使用 Adobe Acrobat Pro 进行验证。
如果您尝试该软件包,请在文档“extras”文件夹中查找简短(假)小说的示例。
请记住,这个软件包是专门为印刷小说(而非电子书)编写的。它有你需要的东西,并且删除了你不需要的数学论文内容。
如果您需要的话,还会向您展示如何准备与 CMYK 分离的彩色封面。