mirror of
https://github.com/changkun/modern-cpp-tutorial.git
synced 2025-12-17 12:44:40 +03:00
see #6: pdf for english version
This commit is contained in:
4
Makefile
4
Makefile
@@ -1,7 +1,8 @@
|
||||
all: pdf website
|
||||
|
||||
pdf:
|
||||
cd pdf/zh-cn && pwd && make
|
||||
cd pdf/zh-cn && make
|
||||
cd pdf/en-us && make
|
||||
|
||||
website:
|
||||
cd website && make
|
||||
@@ -11,6 +12,7 @@ serve:
|
||||
|
||||
clean:
|
||||
cd pdf/zh-cn && make clean
|
||||
cd pdf/en-us && make clean
|
||||
cd website && make clean
|
||||
|
||||
.PHONY : pdf website clean
|
||||
@@ -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:
|
||||
|
||||
- [GitHub Online](./book/en-us/toc.md)
|
||||
- [PDF document]
|
||||
- [Website]
|
||||
- [PDF document](./pdf/en-us/modern-cpp-tutorial.pdf)
|
||||
- [Website](https://changkun.de/modern-cpp)
|
||||
|
||||
## 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.
|
||||
|
||||
## 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
|
||||
|
||||
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
|
||||
|
||||
|
||||
28
pdf/en-us/Makefile
Normal file
28
pdf/en-us/Makefile
Normal 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
26
pdf/en-us/aggregator.py
Normal 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)
|
||||
26
pdf/en-us/meta/cpp-listings.tex
Normal file
26
pdf/en-us/meta/cpp-listings.tex
Normal 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
218
pdf/en-us/meta/template.tex
Normal 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}
|
||||
5710
pdf/en-us/modern-cpp-tutorial.pdf
Normal file
5710
pdf/en-us/modern-cpp-tutorial.pdf
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,8 @@
|
||||
# !/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', '返回目录', '许可', 'license']
|
||||
@@ -13,10 +15,11 @@ copyright: cc-by-nc-nd 4.0
|
||||
---
|
||||
""")
|
||||
for chapter in chapters:
|
||||
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)
|
||||
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)
|
||||
Binary file not shown.
Reference in New Issue
Block a user