summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/yb-book
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/yb-book')
-rw-r--r--macros/latex/contrib/yb-book/DEPENDS.txt33
-rw-r--r--macros/latex/contrib/yb-book/README.md25
-rw-r--r--macros/latex/contrib/yb-book/samples/sample.tex41
-rw-r--r--macros/latex/contrib/yb-book/yb-book-logo.pdfbin0 -> 5216 bytes
-rw-r--r--macros/latex/contrib/yb-book/yb-book.cls341
-rw-r--r--macros/latex/contrib/yb-book/yb-book.pdfbin0 -> 239404 bytes
-rw-r--r--macros/latex/contrib/yb-book/yb-book.tex79
7 files changed, 519 insertions, 0 deletions
diff --git a/macros/latex/contrib/yb-book/DEPENDS.txt b/macros/latex/contrib/yb-book/DEPENDS.txt
new file mode 100644
index 0000000000..df34424b3d
--- /dev/null
+++ b/macros/latex/contrib/yb-book/DEPENDS.txt
@@ -0,0 +1,33 @@
+hard xkeyval
+hard geometry
+hard fontenc
+hard inputenc
+hard anyfontsize
+hard tikz
+hard chngcntr
+hard lastpage
+hard paralist
+hard xcolor
+hard graphicx
+hard setspace
+hard textcomp
+hard enumitem
+hard float
+hard ulem
+hard qrcode
+hard wrapfig
+hard xfp
+hard soul} % in order to use \st{
+hard xifthen
+hard csquotes
+hard biblatex
+hard imakeidx
+hard microtype
+hard libertine
+hard footmisc
+hard titlesec
+hard titlesec
+hard fancyhdr
+hard wrapfig
+hard mdframed
+hard changepage
diff --git a/macros/latex/contrib/yb-book/README.md b/macros/latex/contrib/yb-book/README.md
new file mode 100644
index 0000000000..a9eae33589
--- /dev/null
+++ b/macros/latex/contrib/yb-book/README.md
@@ -0,0 +1,25 @@
+[![make](https://github.com/yegor256/yb-book/actions/workflows/make.yml/badge.svg)](https://github.com/yegor256/yb-book/actions/workflows/make.yml)
+[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/yegor256/yb-book/blob/master/LICENSE.txt)
+
+This LaTeX class I use to format [my books](https://www.yegor256.com/books.html),
+which I sell [on Amazon](https://www.amazon.com/Yegor-Bugayenko/e/B01AM1QMDK).
+
+First, [install it](https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages)
+from [CTAN](https://ctan.org/pkg/yb-book)
+and then use in the preamble:
+
+```tex
+\documentclass{yb-book}
+\renewcommand*\theauthor{Jeff Lebowski}
+\renewcommand*\thevolume{1}
+\renewcommand*\thetitle{New Book About OOP}
+\begin{document}
+Hello, world!
+\end{document}
+```
+
+If you want to contribute yourself, make a fork, then create a branch,
+then run `make` in the root directory.
+It should compile everything without errors. If not, submit an issue and wait.
+Otherwise, make your changes and then run `make` again. If the build is
+still clean, submit a pull request.
diff --git a/macros/latex/contrib/yb-book/samples/sample.tex b/macros/latex/contrib/yb-book/samples/sample.tex
new file mode 100644
index 0000000000..b5528d54ca
--- /dev/null
+++ b/macros/latex/contrib/yb-book/samples/sample.tex
@@ -0,0 +1,41 @@
+% (The MIT License)
+%
+% Copyright (c) 2021 Yegor Bugayenko
+%
+% Permission is hereby granted, free of charge, to any person obtaining a copy
+% of this software and associated documentation files (the 'Software'), to deal
+% in the Software without restriction, including without limitation the rights
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in all
+% copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+% SOFTWARE.
+
+\documentclass{../yb-book}
+\renewcommand*\thetitle{\LaTeX{} Class yb-book}
+\renewcommand*\theauthor{Yegor Bugayenko}
+\begin{document}
+
+\ybPrintTitlePage
+
+\newpage
+
+\chapter{Overview}
+
+\section{Purpose}
+
+\index{computer}
+This is a very interesting book about computers.
+
+\ybPrintIndex
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/yb-book/yb-book-logo.pdf b/macros/latex/contrib/yb-book/yb-book-logo.pdf
new file mode 100644
index 0000000000..5d49cb9daa
--- /dev/null
+++ b/macros/latex/contrib/yb-book/yb-book-logo.pdf
Binary files differ
diff --git a/macros/latex/contrib/yb-book/yb-book.cls b/macros/latex/contrib/yb-book/yb-book.cls
new file mode 100644
index 0000000000..4b99e80514
--- /dev/null
+++ b/macros/latex/contrib/yb-book/yb-book.cls
@@ -0,0 +1,341 @@
+% (The MIT License)
+%
+% Copyright (c) 2021-2022 Yegor Bugayenko
+%
+% Permission is hereby granted, free of charge, to any person obtaining a copy
+% of this software and associated documentation files (the 'Software'), to deal
+% in the Software without restriction, including without limitation the rights
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in all
+% copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+% SOFTWARE.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{yb-book}[2022/01/03 0.1.0 YB Branded Book Style]
+
+\RequirePackage{xkeyval}
+
+\makeatletter
+\newif\ifyb@draft
+\DeclareOptionX{draft}{\yb@drafttrue}
+\newif\ifyb@compact
+\DeclareOptionX{compact}{\yb@compacttrue}
+\newif\ifyb@manuscript
+\DeclareOptionX{manuscript}{\yb@manuscripttrue}
+\ProcessOptionsX
+\makeatother
+
+\makeatletter\ifyb@draft
+ \PassOptionsToClass{11pt}{book}
+ \PassOptionsToClass{oneside}{book}
+\else
+ \ifyb@manuscript
+ \PassOptionsToClass{12pt}{book}
+ \PassOptionsToClass{oneside}{book}
+ \else
+ \PassOptionsToClass{11pt}{book}
+ \PassOptionsToClass{twoside}{book}
+ \fi
+\fi\makeatother
+
+\LoadClass{book}
+
+\RequirePackage{geometry}
+ \geometry{paperwidth=6in, paperheight=9in, bindingoffset=0.25in, left=0.75in, right=0.75in, top=0.75in, bottom=1.25in}
+ \makeatletter\ifyb@draft
+ \geometry{a4paper, margin=1in, left=1.5in}
+ \else
+ \ifyb@manuscript
+ \geometry{a4paper, margin=1.2in}
+ \fi
+ \fi\makeatother
+
+\RequirePackage[T1]{fontenc}
+\RequirePackage[utf8]{inputenc}
+\RequirePackage{anyfontsize}
+\RequirePackage{tikz}
+ \usetikzlibrary{positioning}
+ \usetikzlibrary{shapes}
+ \usetikzlibrary{fit}
+\RequirePackage{chngcntr}
+ \counterwithout{footnote}{chapter}
+\RequirePackage{lastpage}
+\RequirePackage{paralist}
+\RequirePackage{xcolor}
+\RequirePackage{graphicx}
+\RequirePackage{setspace}
+ \setstretch{1.2}
+ \makeatletter\ifyb@draft\setstretch{1.1}\fi\makeatother
+ \makeatletter\ifyb@compact\setstretch{1.0}\fi\makeatother
+ \makeatletter\ifyb@manuscript\setstretch{1.1}\fi\makeatother
+\RequirePackage{textcomp}
+\RequirePackage[inline]{enumitem}
+ \setlist{nosep}
+\RequirePackage{float}
+\RequirePackage[normalem]{ulem}
+\RequirePackage{qrcode}
+\RequirePackage{wrapfig}
+ \pagestyle{plain}
+\RequirePackage{xfp}
+\RequirePackage{soul} % in order to use \st{} to strikethrough
+\RequirePackage{xifthen}
+\RequirePackage[autostyle=try]{csquotes}
+
+\RequirePackage[indexing=cite,style=authoryear,natbib=true,maxnames=1,minnames=1,doi=false,url=false,isbn=false,isbn=false]{biblatex}
+ \DeclareCiteCommand{\citetitle}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexnames{labelname}}
+ {}%
+ \printfield[citetitle]{labeltitle}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+ \DeclareCiteCommand*{\citetitle}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexnames{labelname}}
+ {}%
+ \printfield[citetitle]{title}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+\RequirePackage{imakeidx}
+ \renewbibmacro*{citeindex}{\indexnames{labelname}{}}
+ \makeindex
+ \indexsetup{othercode={\hyphenpenalty=10000}}
+
+\newenvironment{condensed}{%
+ \begingroup\setstretch{1.0}%
+ % This lsstyle is defined by 'letterspace' in microtype
+ \lsstyle}{\endgroup}
+
+\makeatletter\ifyb@draft\else
+ \RequirePackage[letterspace=-50]{microtype}
+\fi\makeatother
+
+\makeatletter\ifyb@manuscript
+ \RequirePackage[tt=false,type1=true]{libertine}
+\fi\makeatother
+
+\RequirePackage[bottom,perpage,multiple]{footmisc}
+ % see https://tex.stackexchange.com/questions/40072/incompatibility-between-footmisc-option-multiple-and-hyperref/62091#62091
+ \makeatletter\let\yb@oldfootnote\footnote\makeatother
+ \makeatletter\newcommand\yb@nexttoken\relax\makeatother
+ \makeatletter\newcommand\yb@isfootnote{%
+ \ifx\footnote\yb@nexttoken\textsuperscript{,}\fi}\makeatother
+ \makeatletter\renewcommand\footnote[1]{%
+ \yb@oldfootnote{#1}\futurelet\yb@nexttoken\yb@isfootnote}\makeatother
+
+\makeatletter
+ \let\yb@oldsection\section
+ \ifyb@draft
+ \RequirePackage[medium]{titlesec}
+ \else
+ \RequirePackage[raggedright]{titlesec}
+ \titlespacing{\section}{0in}{6pt}{6pt}[1in]
+ \renewcommand\section{\newpage\yb@oldsection}
+ \fi
+\makeatother
+
+\makeatletter\ifyb@compact
+ \renewcommand\section{\vspace{2em}\yb@oldsection}
+\fi\makeatother
+
+\makeatletter\ifyb@draft
+ \RequirePackage{fancyhdr}
+ \pagestyle{fancy}
+ \renewcommand\headrulewidth{0pt}
+ \renewcommand\footrulewidth{0pt}
+ \fancyhf{}
+ \fancyhead[L,C,LO,CO]{}
+ \fancyhead[R,RO]{
+ \begin{textblock}{4}(11.5,1)
+ \begin{tikzpicture}
+ \node [color=gray, rotate=270, font=\ttfamily\scriptsize, text width=5in] at (0,0) {
+ Copyright \textcopyright{} \the\year{} by \theauthor{}.
+ All rights reserved. No part of the contents of this book may be
+ reproduced or transmitted in any form or by any means without the
+ written permission of the publisher.
+ This particular manuscript is printed for
+ \textbf{\thereviewer{}} and may be used only for one-time review. The
+ manuscript has to be destroyed after the review.
+ };
+ \end{tikzpicture}
+ \end{textblock}
+ }
+ \fancyfoot[C,CO]{\small\ttfamily page \#\thepage{} of \pageref{LastPage}}
+\fi\makeatother
+
+\renewcommand\maketitle{
+ {\LARGE\textbf{\thetitle}}
+ \\[1em]
+ by \theauthor{}
+ \\[4em]
+ \ifx\thevolume\empty\else%
+ Volume \thevolume{}\\
+ \fi
+ \ifx\thedate\empty\else%
+ Rendered on \thedate{}
+ \fi
+ \ifx\theversion\empty\else%
+ \\
+ Ver. \theversion{}
+ \fi
+}
+
+\makeatletter\newcommand\ybPrintTitlePage{
+ \ifyb@draft\else
+ \begin{titlepage}
+ \ttfamily
+ \vspace*{\fill}
+ \noindent
+ {\Huge\textbf{\thetitle}}
+ \\[1em]
+ by \theauthor{}
+ \\[4em]
+ \ifx\thevolume\empty\else%
+ Volume \thevolume{}\\
+ \fi
+ \ifx\thedate\empty\else%
+ \thedate{}
+ \fi
+ \ifx\thedate\empty\else%
+ \\
+ \theversion{}
+ \fi
+ \vspace*{\fill}
+ \end{titlepage}
+ \fi
+}\makeatother
+
+\makeatletter\newcommand\ybPrintTOC{
+ \ifyb@draft\else
+ \ifyb@compact\else\cleardoublepage\fi
+ {\setstretch{0.7}\tableofcontents}
+ \fi
+}\makeatother
+
+\makeatletter\newcommand\ybPrintIndex[1][Index]{
+ \ifyb@draft\else
+ \cleardoublepage
+ {
+ \setstretch{1.0}
+ \small
+ \addcontentsline{toc}{chapter}{#1}
+ \printindex
+ }
+ \fi
+}\makeatother
+
+\newcommand\ybPrintIcons{%
+ \ifdefempty{\theemail{}}{}{%
+ \includegraphics[height=1em]{images/icon-email.pdf}%
+ \theemail{}%
+ }%
+ \includegraphics[height=1em]{images/icon-twitter.pdf}%
+ \includegraphics[height=1em]{images/icon-linkedin.pdf}%
+ \includegraphics[height=1em]{images/icon-github.pdf}%
+ \includegraphics[height=1em]{images/icon-instagram.pdf}%
+ \includegraphics[height=1em]{images/icon-facebook.pdf}%
+ \thesocial{}%
+}
+
+% quotes
+\RequirePackage{wrapfig}
+\RequirePackage{mdframed}
+\RequirePackage{changepage}
+ \strictpagecheck
+\mdfdefinestyle{quoteodd}{backgroundcolor=black!0,
+ leftmargin=6pt,rightmargin=0pt,
+ innerleftmargin=6pt,innerrightmargin=0pt,
+ innertopmargin=0pt,innerbottommargin=0pt,
+ skipabove=0pt,skipbelow=0pt,
+ linewidth=2pt,
+ topline=false,bottomline=false,rightline=false}
+\mdfdefinestyle{quoteeven}{backgroundcolor=black!0,
+ rightmargin=6pt,leftmargin=0pt,
+ innerrightmargin=6pt,innerleftmargin=0pt,
+ innertopmargin=0pt,innerbottommargin=0pt,
+ skipabove=0pt,skipbelow=0pt,
+ linewidth=2pt,
+ topline=false,bottomline=false,leftline=false}
+\makeatletter\newcommand\ybQuote[3]{%
+ \ifthenelse{\isempty{#3}}{}{
+ \ifx\hfuzz#2\hfuzz%
+ \index{#3}%
+ \else%
+ \index{#3, #2}%
+ \fi%
+ }%
+ \def\yb@body{%
+ \raggedright%
+ \ifx\hfuzz#3\hfuzz%
+ #1%
+ \else%
+ ``#1''\\\raggedleft---#2 #3%
+ \fi%
+ }
+ \ifyb@draft%
+ \begin{wrapfigure}{r}{0.4\textwidth}%
+ \begin{mdframed}[style=quoteodd]%
+ \yb@body%
+ \end{mdframed}%
+ \end{wrapfigure}%
+ \else%
+ \begin{wrapfigure}{o}[12pt]{0.4\textwidth}%
+ \sffamily\checkoddpage%
+ \ifoddpage%
+ \begin{mdframed}[style=quoteodd]\yb@body\end{mdframed}%
+ \else%
+ \begin{mdframed}[style=quoteeven]\yb@body\end{mdframed}%
+ \fi%
+ \vspace{-12pt}
+ \end{wrapfigure}%
+ \fi%
+}\makeatother
+
+\makeatletter\newcommand\ybPrintBibliography{%
+ \AtNextBibliography{\small}%
+ \raggedright%
+ \ifyb@manuscript%
+ \setlength\bibitemsep{0pt}%
+ \newpage%
+ \begin{multicols}{2}{\setstretch{1.0}\printbibliography}\end{multicols}
+ \else
+ \printbibliography
+ \fi
+}\makeatother
+
+\AtBeginDocument{%
+ \raggedbottom%
+ \setlength\topskip{0mm}%
+ \setlength\parindent{0pt}%
+ \setlength\parskip{6pt}%
+ \interfootnotelinepenalty=10000%
+}
+
+\newcommand*\thetitle{\textbackslash{}thetitle}
+\newcommand*\thevolume{}
+\newcommand*\thedate{}
+\newcommand*\theemail{\textbackslash{}theemail}
+\newcommand*\thesocial{\textbackslash{}thesocial}
+\newcommand*\theversion{\textbackslash{}theversion}
+\newcommand*\theauthor{\textbackslash{}theauthor}
+\newcommand*\thereviewer{\textbackslash{}thereviewer}
+\newcommand*\theyear{\textbackslash{}theyear}
+\newcommand*\theprice{\textbackslash{}theprice}
+
+\endinput
diff --git a/macros/latex/contrib/yb-book/yb-book.pdf b/macros/latex/contrib/yb-book/yb-book.pdf
new file mode 100644
index 0000000000..cde5f931f5
--- /dev/null
+++ b/macros/latex/contrib/yb-book/yb-book.pdf
Binary files differ
diff --git a/macros/latex/contrib/yb-book/yb-book.tex b/macros/latex/contrib/yb-book/yb-book.tex
new file mode 100644
index 0000000000..0937552058
--- /dev/null
+++ b/macros/latex/contrib/yb-book/yb-book.tex
@@ -0,0 +1,79 @@
+% (The MIT License)
+%
+% Copyright (c) 2021-2022 Yegor Bugayenko
+%
+% Permission is hereby granted, free of charge, to any person obtaining a copy
+% of this software and associated documentation files (the 'Software'), to deal
+% in the Software without restriction, including without limitation the rights
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in all
+% copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+% SOFTWARE.
+
+\documentclass[compact,manuscript]{./yb-book}
+\usepackage{ffcode}
+\usepackage{href-ul}
+\renewcommand*\theversion{0.1.0}
+\renewcommand*\thedate{2022/01/03}
+\renewcommand*\thetitle{\LaTeX{} Class \ff{yb-book}}
+\renewcommand*\theauthor{Yegor Bugayenko}
+
+\begin{document}
+
+\includegraphics[height=6em]{yb-book-logo.pdf}
+\vspace*{24pt}
+
+\maketitle
+
+\index{Amazon}
+The provided class \ff{yb-book} helps me design
+\href{https://www.yegor256.com/books.html}{my books} and
+publish them
+\href{https://www.amazon.com/Yegor-Bugayenko/e/B01AM1QMDK}{on Amazon}.
+
+There are a few class options you can use:
+
+\ff{compact} --- when you need to make text more compact
+and take less vertical space;
+
+\ff{manuscript} --- when the format is not for Amazon printing,
+but for some other purposes (the page size is A4), like the document
+you are reading right now;
+
+\ff{draft} --- when it's a draft for reviewers (the page size is A4)
+and you want to have a watermark and a compact form of the content;
+
+\section*{Printers}
+
+There are a number of printers, commands that print large blocks of text
+in the expected format:
+
+\ff{\textbackslash{}ybPrintTitlePage} --- prints the first page of a book.
+
+\ff{\textbackslash{}ybPrintTOC} --- prints the table of contents.
+
+\ff{\textbackslash{}ybQuote} --- prints a side quote.
+
+\ff{\textbackslash{}ybPrintBibliography} --- prints the list of bib references.
+
+\ff{\textbackslash{}ybPrintIcons} --- prints your social icons.
+
+\ff{\textbackslash{}ybPrintIndex[1]} --- prints index with an optional name of the section (instead of ``Index'').
+
+For more samples, check the directory \ff{samples/}.
+
+You are welcome to suggest additional commands, but the style
+of my books is intentionally as simple as possible, avoiding formatting
+as much as possible.
+
+\end{document} \ No newline at end of file