see #6: pdf for english version

This commit is contained in:
Changkun Ou
2018-05-06 15:20:13 +02:00
parent 70250c2b0a
commit 9e18543f65
9 changed files with 6028 additions and 11 deletions

View File

@@ -1,7 +1,8 @@
all: pdf website all: pdf website
pdf: pdf:
cd pdf/zh-cn && pwd && make cd pdf/zh-cn && make
cd pdf/en-us && make
website: website:
cd website && make cd website && make
@@ -11,6 +12,7 @@ serve:
clean: clean:
cd pdf/zh-cn && make clean cd pdf/zh-cn && make clean
cd pdf/en-us && make clean
cd website && make clean cd website && make clean
.PHONY : pdf website clean .PHONY : pdf website clean

View File

@@ -32,8 +32,8 @@ In addition, The author would like to encourage that readers should be able to u
You can choose from the following reading methods: You can choose from the following reading methods:
- [GitHub Online](./book/en-us/toc.md) - [GitHub Online](./book/en-us/toc.md)
- [PDF document] - [PDF document](./pdf/en-us/modern-cpp-tutorial.pdf)
- [Website] - [Website](https://changkun.de/modern-cpp)
## Code ## Code
@@ -43,11 +43,15 @@ Each chapter of this book has a lot of code. If you encounter problems when writ
There are few exercises At the end of each chapter of the book. It is for testing whether you can use the knowledge points in the current chapter. You can find the possible answer to the problem from [here](./exercise). The folder name is the chapter number. There are few exercises At the end of each chapter of the book. It is for testing whether you can use the knowledge points in the current chapter. You can find the possible answer to the problem from [here](./exercise). The folder name is the chapter number.
## Website
The source code of the [website](https://changkun.de/modern-cpp) of this book can be found [here](./website), which is built by [hexo](https://hexo.io) and [vuejs](https://vuejs.org). The website provides you another way of reading the book, it is also adapts to mobile.
## Acknowledgements ## Acknowledgements
This book is originally written in Chinese. This book is originally written in Chinese.
The author has limited time and language skills. If readers find any mistakes of the book or any language improvements, please feel free to open an [issue](https://github.com/changkun/modern-cpp-tutorial/issues). The author has limited time and language skills. If readers find any mistakes of the book or any language improvements, please feel free to open an [Issue](https://github.com/changkun/modern-cpp-tutorial/issues) or start a [Pull request](https://github.com/changkun/modern-cpp-tutorial/pulls).
## Licenses ## Licenses

28
pdf/en-us/Makefile Normal file
View File

@@ -0,0 +1,28 @@
title = 'C++11/14/17 On the Fly'
filename = 'modern-cpp-tutorial'
outputname='modern-cpp-tutorial'
all: pdf
pdf: markdown
@echo "Compiling PDF file..."
@pandoc -s $(filename).md -o $(outputname).pdf \
--title-prefix $(title) \
--listings -H meta/cpp-listings.tex \
--template=meta/template.tex \
--normalize \
--smart \
--latex-engine=`which xelatex`
@echo "Done."
@rm *.md
markdown:
@echo "Copy markdown files..."
@cp -r ../../book/en-us/* .
@echo "Aggregating markdown files..."
@python3 aggregator.py
clean:
rm -rf *.md *.pdf
.PHONY: markdown pdf clean

26
pdf/en-us/aggregator.py Normal file
View File

@@ -0,0 +1,26 @@
# !/usr/bin/env python3
# author: changkun<hi@changkun.us>
import os
chapters = ['00-preface.md', '01-intro.md', '02-usability.md', '03-runtime.md', '04-containers.md', '05-pointers.md', '06-regex.md', '07-thread.md', '08-filesystem.md', '09-others.md', '10-cpp20.md', 'appendix.md']
ignores = ['TOC', 'Return to TOC', 'License', 'license']
with open('modern-cpp-tutorial.md', 'w') as outfile:
outfile.write("""---
title: "C++11/14/17 On the Fly"
author: Changkun Ou <hi@changkun.us>
copyright: cc-by-nc-nd 4.0
---
""")
for chapter in chapters:
if os.path.isfile(chapter):
with open(chapter) as ch:
outfile.write('\n')
for line in ch:
if any(keyword in line for keyword in ignores):
continue
else:
outfile.write(line)

View File

@@ -0,0 +1,26 @@
\usepackage{xcolor}
\definecolor{keyword}{HTML}{BA2CA3}
\definecolor{string}{HTML}{D12F1B}
\definecolor{comment}{HTML}{008400}
\lstset{
basicstyle={\small\ttfamily},
keywordstyle={\color[rgb]{0.13,0.29,0.53}\bfseries},
breaklines=true,
emphstyle={\bfseries\color{Rhodamine}},
commentstyle={\color[rgb]{0.56,0.35,0.01}\itshape},
stringstyle={\color[rgb]{0.31,0.60,0.02}},
showstringspaces=false,
frame=shadowbox,
breakatwhitespace=false,
captionpos=b,
extendedchars=true,
keepspaces=true,
numbers=left,
numberstyle=\tiny,
rulecolor=\color{black},
rulesepcolor={\color{blue!20!white}},
showspaces=false,
}

218
pdf/en-us/meta/template.tex Normal file
View File

@@ -0,0 +1,218 @@
\documentclass[a4paper, 10pt]{article}
\usepackage{geometry}
\geometry{
top=1in,
inner=1in,
outer=1in,
bottom=1in,
headheight=3ex,
headsep=2ex
}
\usepackage{tabu}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{booktabs}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\linespread{1.2}\selectfont % 行距
%\XeTeXlinebreaklocale "zh" % 针对中文自动换行
%\XeTeXlinebreakskip = 0pt plus 1pt % 字与字之间加入 0pt 至 1pt 的间距,确保左右对齐
%\parindent 0em % 段落缩进
%\setlength{\parskip}{20pt} % 段落间距
\ifxetex
\usepackage{xltxtra,xunicode}
\fi
$if(mainfont)$
\setmainfont{$mainfont$}
$endif$
$if(sansfont)$
\setsansfont{$sansfont$}
$endif$
$if(monofont)$
\setmonofont{$monofont$}
$endif$
$if(mathfont)$
\setmathfont{$mathfont$}
$endif$
% use microtype if available
\IfFileExists{microtype.sty}{\usepackage{microtype}}{}
$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$endif$
$if(natbib)$
\usepackage{natbib}
\bibliographystyle{plainnat}
$endif$
$if(biblatex)$
\usepackage{biblatex}
$if(biblio-files)$
\bibliography{$biblio-files$}
$endif$
$endif$
$if(listings)$
\usepackage{listings}
$endif$
$if(lhs)$
\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
$endif$
$if(highlighting-macros)$
$highlighting-macros$
$endif$
$if(verbatim-in-note)$
\usepackage{fancyvrb}
$endif$
$if(tables)$
\usepackage{longtable}
$endif$
\usepackage{graphicx}
\usepackage{caption}
% We will generate all images so they have a width \maxwidth. This means
% that they will get their normal width if they fit onto the page, but
% are scaled down if they would overflow the margins.
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth
\else\Gin@nat@width\fi}
\makeatother
\let\Oldincludegraphics\includegraphics
\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=0.7\maxwidth]{#1}}
\ifxetex
\usepackage[setpagesize=false, % page size defined by xetex
unicode=false, % unicode breaks when used with xetex
xetex]{hyperref}
\else
\usepackage[unicode=true]{hyperref}
\fi
\hypersetup{breaklinks=true,
bookmarks=true,
pdfauthor={$author-meta$},
pdftitle={$title-meta$},
colorlinks=true,
urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,
pdfborder={0 0 0}}
\urlstyle{same} % don't use monospace font for urls
$if(links-as-notes)$
% Make links footnotes instead of hotlinks:
\renewcommand{\href}[2]{#2\footnote{\url{#1}}}
$endif$
$if(strikeout)$
\usepackage[normalem]{ulem}
% avoid problems with \sout in headers with hyperref:
\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
$endif$
\setlength{\parindent}{10pt}
%\setlength{\parskip}{6pt plus 2pt minus 1pt}
\setlength{\emergencystretch}{3em} % prevent overfull lines
\usepackage{titling}
%\setlength{\droptitle}{-8em} % 将标题移动至页面上方
\usepackage{fancyhdr}
\usepackage{lastpage}
\pagestyle{fancyplain}
$if(numbersections)$
\setcounter{secnumdepth}{5}
$else$
\setcounter{secnumdepth}{0}
$endif$
$if(verbatim-in-note)$
\VerbatimFootnotes % allows verbatim text in footnotes
$endif$
$if(lang)$
\ifxetex
\usepackage{polyglossia}
\setmainlanguage{$mainlang$}
\else
\usepackage[$lang$]{babel}
\fi
$endif$
$for(header-includes)$
$header-includes$
$endfor$
$if(title)$
\title{$title$}
$endif$
\author{$for(author)$$author$$sep$ \and $endfor$}
\date{$date$}
%%%% 段落首行缩进两个字 %%%%
\makeatletter
\let\@afterindentfalse\@afterindenttrue
\@afterindenttrue
\makeatother
\setlength{\parindent}{2em} %中文缩进两个汉字位
%%%% 下面的命令设置行间距与段落间距 %%%%
\linespread{1.4}
\setlength{\parskip}{1ex}
\setlength{\parskip}{0.5\baselineskip}
\begin{document}
\newcommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\thispagestyle{plain}
\begin{center}
{\LARGE\textbf{C++11/14/17 On the Fly}}
\vspace{1em}
{\large Changkun Ou (hi@changkun.us)}
\vspace{1ex}
Last update: \today
\vspace{1em}
\textbf{\large License}
\noindent This work is written by \href{https://github.com/changkun}{Ou Changkun} and licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. \texttt{\small http://creativecommons.org/licenses/by-nc-nd/4.0/}
\vspace{8em}
\includegraphics{../../assets/cover-2nd-en}
\end{center}
$for(include-before)$
$include-before$
$endfor$
{
\newpage
\hypersetup{linkcolor=black}
\setcounter{tocdepth}{3}
\tableofcontents
}
\newpage
$body$
$if(natbib)$
$if(biblio-files)$
$if(biblio-title)$
$if(book-class)$
\renewcommand\bibname{$biblio-title$}
$else$
\renewcommand\refname{$biblio-title$}
$endif$
$endif$
\bibliography{$biblio-files$}
$endif$
$endif$
$if(biblatex)$
\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$
$endif$
$for(include-after)$
$include-after$
$endfor$
\end{document}

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,8 @@
# !/usr/bin/env python3 # !/usr/bin/env python3
# author: changkun<hi@changkun.us> # author: changkun<hi@changkun.us>
import os
chapters = ['00-preface.md', '01-intro.md', '02-usability.md', '03-runtime.md', '04-containers.md', '05-pointers.md', '06-regex.md', '07-thread.md', '08-filesystem.md', '09-others.md', '10-cpp20.md', 'appendix.md'] chapters = ['00-preface.md', '01-intro.md', '02-usability.md', '03-runtime.md', '04-containers.md', '05-pointers.md', '06-regex.md', '07-thread.md', '08-filesystem.md', '09-others.md', '10-cpp20.md', 'appendix.md']
ignores = ['TOC', '返回目录', '许可', 'license'] ignores = ['TOC', '返回目录', '许可', 'license']
@@ -13,10 +15,11 @@ copyright: cc-by-nc-nd 4.0
--- ---
""") """)
for chapter in chapters: for chapter in chapters:
with open(chapter) as ch: if os.path.isfile(chapter):
outfile.write('\n') with open(chapter) as ch:
for line in ch: outfile.write('\n')
if any(keyword in line for keyword in ignores): for line in ch:
continue if any(keyword in line for keyword in ignores):
else: continue
outfile.write(line) else:
outfile.write(line)

Binary file not shown.