diff options
author | Karl Berry <karl@freefriends.org> | 2017-03-02 22:04:43 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-03-02 22:04:43 +0000 |
commit | ed9d19652f40ee17941ba6832f511e3726a87747 (patch) | |
tree | 1363a8c132b7883bb1b8e0f87cb9ba89751d7bfc /Master/texmf-dist/tex/lualatex/novel/novel.cls | |
parent | e4e5bf0f152ea04be229a2747f8b3c2edc4407e7 (diff) |
novel (2mar17)
git-svn-id: svn://tug.org/texlive/trunk@43384 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/lualatex/novel/novel.cls')
-rw-r--r-- | Master/texmf-dist/tex/lualatex/novel/novel.cls | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/lualatex/novel/novel.cls b/Master/texmf-dist/tex/lualatex/novel/novel.cls new file mode 100644 index 00000000000..f39aa7fa09e --- /dev/null +++ b/Master/texmf-dist/tex/lualatex/novel/novel.cls @@ -0,0 +1,383 @@ +%% +%% This is file `novel.cls', part of class `novel'. +%% Copyright 2017 Robert Allgeyer. +%% anytthree [at] gmail.com +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +% Actually needs LuaLaTeX, at least version 0.95 from TeXLive 2016. +\ProvidesClass{novel}[2017/03/01 v1.0.6 LaTeX document class] +%% + + +%% DESCRIPTION: +%% Class `novel' is designed for print fiction: novels or short stories. +%% It cannot be used for e-books or for journal publication. +%% It is not suitable for most non-fiction, because routine academic features +%% such as bibiography and automatic sectioning are defeated. +%% +%% There are pre-configured layouts for the most commonly used choices of +%% trim size (finished book width and height), and internal layout consistent +%% with fiction. The user can over-ride the pre-configured settings. +%% +%% The class will automatically create PDF/X compliant files upon request, +%% using a self-contained command structure. +%% +%% LuaLaTeX is required, and input files must be encoded utf-8. +%% +%% Fonts are loaded by luaotfload and fontspec, and massaged by microtype. +%% For best results, use modern Open Type fonts, or TrueType fonts. +%% +%% The Libertinus font family, a fork of [Linux] Libertine/Biolinum, +%% is the default. Actually, I recommend it! In addition, an included +%% custom font, NovelDeco.otf, is used for special purposes. +%% + + +%% REQUIRE LUATEX and do some preliminary setup. +%% ----------------------------------------------------------------------------- +%% These are not user settings. +% +\RequirePackage{ifluatex} % LuaTeX is required. Not XeTeX, dvips, or pdfTeX. +\RequirePackage{luatex85} % Needed for compatibility when using LuaTeX 0.95 etc. +\RequirePackage{pdftexcmds} % compatibility +\ifluatex + % New with TeXlive 2016. Removes unnecessary File Data: + \pdfvariable suppressoptionalinfo 511 % writes only ID to PDF Catalog +\else + \ClassError{novel}{Must compile with LuaLaTeX 0.95+}{Sorry, LuaLaTeX only.% + No pdfTeX, dvips, or XeTeX.} +\fi +% +\RequirePackage{etoolbox} % general good stuff +\RequirePackage{xifthen} % improved ifthenelse handling +\RequirePackage{xstring} % parses strings +\RequirePackage{fp} % used everywhere for math calculations +\FPmessagesfalse % eliminates numerous friendly messages from the log +% +\pdfminorversion=3 % might be reset later, depending on settings +\gdef\thepdfminorversion{\pdfminorversion} +% +\RequirePackage{silence} % Used here: +% hyperref draft mode is always on, even when novel is not in draft mode: +\WarningFilter{hyperref}{Draft mode on} % So, get rid of the hyperref warning. +% Prevent complaints about no protrusion list for cmr, cmm, etc. in decimal pts: +\WarningFilter{microtype}{I cannot find a protrusion list} % It's not there! +% +\RequirePackage[relative]{textpos} % for inserting images +\RequirePackage{noindentafter} % for unindented chapter and scene starts +\RequirePackage{calc} % allows length expression calculations +\RequirePackage{changepage} % block indents, etc. +\RequirePackage{atbegshi} % for one-page header changes. Also used by hyperref. +\RequirePackage{letltxmacro} % for re-defining some macros +\RequirePackage{magaz} % special treatment of first lines +\RequirePackage{changepage} % for adjusted text widths. Do not use strict! +\RequirePackage{xparse} % for writing cool-looking commands +% +% In addition, the following packages are required, but they are not loaded now. +% They must wait for something else to happen first. They will be loaded +% with suitable arguments, when the time comes: +% fontspec -- in novel-LayoutSettings.sty +% unicode-math -- in novel-LayoutSettings.sty +% eso-pic -- in novel-CalculateLayout.sty +% polyglossia -- in novel-FontDefaults.sty +% microtype -- in novel-FontDefaults.sty +% hyperref -- in novel-pdfx.sty +% fancyhdr -- in novel.HeadFootStyles.sty +% xcolor -- lower in this page +% adjustbox -- lower on this page +% eso-pic -- lower on this page +%% + + +%% Process document class options. +%% ----------------------------------------------------------------------------- +% Allowed option list: +% draft xml shademargins graytext greytext cropmarks cropview closecrop +% Yes, I realize that this could have been done another way: +\gdef\@mycol{\@classoptionslist} +\StrDel{\@mycol}{ }[\@mycola] +\StrDel{\@mycola}{,}[\@mycolb] +\StrDel{\@mycolb}{draft}[\@mycolc] +\StrDel{\@mycolc}{xml}[\@mycold] +\StrDel{\@mycold}{shademargins}[\@mycole] +\StrDel{\@mycole}{graytext}[\@mycolf] +\StrDel{\@mycolf}{greytext}[\@mycolg] +\StrDel{\@mycolg}{cropmarks}[\@mycolh] +\StrDel{\@mycolh}{cropview}[\@mycoli] +\StrDel{\@mycoli}{closecrop}[\@mycolj] +% +\gdef\@mycolzzz{\@mycolj} % modify if others added +\ifthenelse{\equal{\@mycolzzz}{}}{}{ + \ClassWarning{novel}{Unrecognized class option: \@mycolzzz\space^^J% + The unrecognized option was ignored!^^J}% +} +% +% If used, option `draft' shows overflow rule. +\newif \if@useDraftMode +\setlength\overfullrule{0pt} +\DeclareOption{draft}{ + \setlength\overfullrule{6pt} + \@useDraftModetrue + \ClassWarning{novel}{Compiled using draft mode. Not for final release!^^J} +} +% If used, option `xml' creates a file `\jobname-XMPasXML.xml` that contains +% the XMP metadata with an xml declaration and comments at top. +% Only works when \SetPDFX is not `off'. +\newif \if@wantXMPasXML +\DeclareOption{xml}{ + \@wantXMPasXMLtrue +} +\DeclareOption{xmp}{ % in case you mis-type. + \ClassError{novel}{No class option `xmp'. Want `xml' ?^^J}% + {There is no class option named `xmp'. It is `xml'.^^J} +} +% Option `shademargins' does just that. Ignored unless in draft mode. +% Does not matter if `graytext' option in use. +\newif \if@shademargins +\DeclareOption{shademargins}{ + \@shademarginstrue +} +% Option `graytext' allows text in grayscale. Images unaffected. +% If this option is not used, all text will be K black. +\newif \if@graytext +\DeclareOption{graytext}{ + \@graytexttrue +} +% For the Brits: +\DeclareOption{greytext}{ + \@graytexttrue +} +% Usually you do NOT want crop (trim) marks. Configurable by \SetCropMarks[]{}. +\newif \if@cropmarks +\DeclareOption{cropmarks}{ + \@cropmarkstrue +} +% The cropview sets PDF CropBox equal to TrimBox instead of MediaBox. +% Only makes a difference when MediaBox is larger than TrimBox. +% Ignored unless in draft mode. +\newif \if@cropview +\DeclareOption{cropview}{ + \@cropviewtrue +} +% With closecrop, the TrimSize and margins are re-sized, to preserve the +% live area, but with reduced margins on all sides (same for verso/recto). +% This option is available only in draft mode, and disables shademargins. +% The purpose is to create a PDF that is more easily read on a handheld device, +% so you can think about edits while traveling. It is NOT an e-book, since +% it has no hyperlinks and is missing some features that an e-book should have. +\newif \if@closecrop +\DeclareOption{closecrop}{ + \@cropviewtrue\@closecroptrue +} +%% Note that document size and normal font size are not class options. +%% They are set by commands in the Preamble, and have default values. +% +\ProcessOptions\relax +% Disable some options, unless in draft mode: +\if@useDraftMode\else + \global\@shademarginsfalse + \global\@cropviewfalse + \global\@closecropfalse +\fi +% +\if@cropview + \global\@cropmarksfalse +\fi +% +\if@closecrop + \global\@cropviewtrue + \global\@shademarginsfalse + \global\@cropmarksfalse +\fi +% +%% end class options + + + +%% Activate xcolor, adjustbox, and eso-pic: +%% ----------------------------------------------------------------------------- +% The final book must be monochrome (black and white only) for all text +% and vector graphics, unless option `graytext' is used. +% Vector graphics are discouraged, in any case. See Page 9. +% You can use grayscale (single channel, not RGB gray) raster images. +% In draft mode only, the `shademargins' option +% requires grayscale, so it is temporarily enabled. +\newif \if@grayenabled +% +\if@useDraftMode + \RequirePackage[gray,hyperref]{xcolor} % allows some layout checks + \global\@grayenabledtrue +\else + \if@graytext + \RequirePackage[gray,hyperref]{xcolor} % black/white book block + \global\@grayenabledtrue + \else + \RequirePackage[monochrome,hyperref]{xcolor} % black/white book block + \fi +\fi +% adjustbox and eso-pic cannot precede xcolor. +\RequirePackage{adjustbox} % for scaling and moving +\RequirePackage{eso-pic} % background effects in draft mode +% +%% end activate xcolor and adjustbox + + + +%% Temporary normal font size +%% ----------------------------------------------------------------------------- +%% This normalsize is temporary, so that packages can load without complaint. +%% It will be modified later, during layout calculations. +\def\Current@FontSizeNum{10} +\def\Current@BaselineSkipNum{13} +\def\normalsize{% + \@setfontsize\normalsize{\Current@FontSizeNum}{\Current@BaselineSkipNum}% +} +\normalsize +% +%% end temporary normal point size and baselineskip + + + +%% Define commands used for File Data, including PDF/X Settings. +%% ----------------------------------------------------------------------------- +%% As used here, `File Data' refers to PDF metadata as found in PDF/Info +%% and in XMP. This class does not write it to the Catalog. +%% Defines commands such as \title{}, not necessarily the same as other TeX. +\RequirePackage{novel-FileData} +% +%% + + +%% Physical Layout Commands and Settings. +%% ----------------------------------------------------------------------------- +%% Define commands that over-ride the class option pre-configured settings. +%% Variety of miscellaneous layout settings such as \parsep, \parindent, etc. +\RequirePackage{novel-LayoutSettings} +% +%% + + +%% Additional Preamble Settings and Commands. +%% ----------------------------------------------------------------------------- +%% +% Macros for use in document body: +\input{novel-TextMacros.sty} +% Standard `fancyhdr' header footer styles: +\input{novel-HeadFootStyles.sty} +% Chapter and Scene styles: +\input{novel-ChapterScene.sty} +% Image placement: +\input{novel-Images.sty} +% Footnotes and endnotes: +\input{novel-Footnotes.sty} +%% + + +%% \AtEndPreamble sets defaults and calculates layout +%% ----------------------------------------------------------------------------- +% +\AtEndPreamble{ + \makeatletter % Necessary. Why? Who knows. + \input{novel-CalculateLayout.sty} + \input{novel-FontDefaults.sty} + \input{novel-pdfx.sty} + \AtBeginShipout{\gdef\@fnafter{}} + \makeatother +} +%% + + +%% \AtBeginDocument finishes the setup +%% ----------------------------------------------------------------------------- +% +% Error if certain packages were requested in the Preamble. +% This macro is invoked \AtBeginDocument. +\newif \ifshutoffblock % part of incompatible package blocking +% +\AtBeginDocument{ % + \defaultfontfeatures{} % reset + % Any other fonts will use these defaults: + \defaultfontfeatures{% + SmallCapsFeatures={Renderer=Basic},Kerning=On,% + Ligatures=TeX,% + }% + % + % Find some useful measurements: + \gdef\@normalxheight{\heightof{x}} + \setlength\normalxheight{\@normalxheight} + \global\normalxheight=\normalxheight + \gdef\@normalXheight{\heightof{X}} + \setlength\normalXheight{\@normalXheight} + \global\normalXheight=\normalXheight + % Activate user choice of whether or not to indent after scenebreak commands: + \if@indentAfterScenebreak\else + \NoIndentAfterCmd{\scenebreak} + \NoIndentAfterCmd{\sceneline} + \NoIndentAfterCmd{\scenestars} + \fi + % + \@activateHeadFootStyles % in file `novel-HeadFootStyles.sty' + \@novelPDFinfo % in file `novel-pdfx.sty'. + % Commands that cannot be used after Preamble: + \let\indentAfterScenebreak\relax + \let\title\relax + \let\author\relax + \let\subtitle\relax + % Disallow incompatible packages: + \ifshutoffblock + \gdef\sorry@no#1{} + \else + \gdef\sorry@no#1{\@ifpackageloaded{#1}{% + \ClassError{novel}{Sorry, package `#1' cannot be used}% + {The `novel' class does not allow use of package `#1'.^^J% + You must remove it from the Preamble, and also remove its commands^^J% + from the body of your document. In rare cases, the offending package^^J% + was loaded by some other package.^^J}% + }{}% + } + \fi + % + \sorry@no{pdfx} + \sorry@no{xmpincl} + \sorry@no{hyperxmp} + \sorry@no{pdfxmult} + \sorry@no{inputenc} + \sorry@no{fontenc} + \sorry@no{showkeys} + \sorry@no{wrapfigure} + \sorry@no{wrapfig} + \sorry@no{float} + \sorry@no{morefloats} + \sorry@no{footmisc} + \sorry@no{footnote} + \sorry@no{manyfoot} + \sorry@no{caption} + \sorry@no{subcaption} + \sorry@no{multirow} + \sorry@no{tabu} + \sorry@no{tabularx} + \sorry@no{tabulary} + \sorry@no{array} + \sorry@no{booktabs} + \sorry@no{eqparbox} + \sorry@no{pdfpages} + \sorry@no{nth} + \sorry@no{engord} + \sorry@no{endnotes} +} +%% + + + +%% +%% End of file `novel.cls' + |