diff options
Diffstat (limited to 'macros/latex/contrib/yb-book')
-rw-r--r-- | macros/latex/contrib/yb-book/DEPENDS.txt | 33 | ||||
-rw-r--r-- | macros/latex/contrib/yb-book/README.md | 25 | ||||
-rw-r--r-- | macros/latex/contrib/yb-book/samples/sample.tex | 41 | ||||
-rw-r--r-- | macros/latex/contrib/yb-book/yb-book-logo.pdf | bin | 0 -> 5216 bytes | |||
-rw-r--r-- | macros/latex/contrib/yb-book/yb-book.cls | 341 | ||||
-rw-r--r-- | macros/latex/contrib/yb-book/yb-book.pdf | bin | 0 -> 239404 bytes | |||
-rw-r--r-- | macros/latex/contrib/yb-book/yb-book.tex | 79 |
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 Binary files differnew file mode 100644 index 0000000000..5d49cb9daa --- /dev/null +++ b/macros/latex/contrib/yb-book/yb-book-logo.pdf 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 Binary files differnew file mode 100644 index 0000000000..cde5f931f5 --- /dev/null +++ b/macros/latex/contrib/yb-book/yb-book.pdf 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 |