\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Andrey (apk)} \pdfinfo{ /Title (coffeescript-language.pdf) /Creator (Cheatography) /Author (Andrey (apk)) /Subject (CoffeeScript language Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{1774FF} \definecolor{LightBackground}{HTML}{F0F6FF} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{CoffeeScript language Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Andrey (apk)} via \textcolor{DarkBackground}{\uline{cheatography.com/6656/cs/1100/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Andrey (apk) \\ \uline{cheatography.com/apk} \\ \uline{\seqsplit{kucherenko}.org/} \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 5th August, 2013.\\ Updated 12th May, 2016.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Installation}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Install NodeJs (htttp://nodejs.org/)} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Install npm (nodejs included)} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{npm install coffee-script -g} \tn % Row Count 3 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Usage}} \tn % Row 0 \SetRowColor{LightBackground} \textasciitilde{}\$ coffee src/file.coffee & Run CoffeeScript file \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \textasciitilde{}\$ coffee -c -o output/ src/ & Compile files from src to output \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} \textasciitilde{}\$ coffee -e "console.log 'Hello World'" & Evaluate CoffeeScript code \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} \$ coffee -{}-join output/all.js -{}-compile src/*.coffee & Concatenate the source CoffeeScript before compiling \tn % Row Count 9 (+ 3) % Row 4 \SetRowColor{LightBackground} \textasciitilde{}\$ coffee & Start Read-eval-print loop \tn % Row Count 11 (+ 2) % Row 5 \SetRowColor{white} \textasciitilde{}\$ coffee -{}-output output/ -cw src/ & Watch directory src for changes \tn % Row Count 13 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Variables}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{language = 'CoffeeScript'} \tn % Row Count 1 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{? - Existential Operator}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{coffee = 'espresso' if morning?} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{cups = 0; cups ?= 1} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{sugar = count ? 1} \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{coffee = \seqsplit{one?.coffee?().please?.no?.sugar?}} \tn % Row Count 4 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.58804 cm} x{2.38896 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Functions}} \tn % Row 0 \SetRowColor{LightBackground} hello = -\textgreater{} console.log "Hello" & define function \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} hello() & call function \tn % Row Count 3 (+ 1) % Row 2 \SetRowColor{LightBackground} sum = (a, b) -\textgreater{} a + b & define function with args \tn % Row Count 5 (+ 2) % Row 3 \SetRowColor{white} sum 1, 2 & call function with args \tn % Row Count 7 (+ 2) % Row 4 \SetRowColor{LightBackground} sum\_multiply = (a, b) -\textgreater{} {[} a + b, a * b{]} & define function \tn % Row Count 9 (+ 2) % Row 5 \SetRowColor{white} {[} sum, multiply {]} = sum\_multiply 1, 2 & call function \tn % Row Count 11 (+ 2) % Row 6 \SetRowColor{LightBackground} myFunc = (param = 'default') -\textgreater{} console.log param & define function with default param \tn % Row Count 14 (+ 3) % Row 7 \SetRowColor{white} otherFunc = (first, other...) -\textgreater{} conole.log other & define function \tn % Row Count 17 (+ 3) % Row 8 \SetRowColor{LightBackground} otherFunc myArray... & call function with array as arguments \tn % Row Count 19 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Scope}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Notice how all of the variable declarations have been pushed up to the top of the closest scope, the first time they appear. outer is not redeclared within the inner function, because it's already in scope; inner within the function, on the other hand, should not be able to change the value of the external variable of the same name, and therefore has a declaration of its own.% Row Count 8 (+ 8) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.28942 cm} x{2.68758 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Arrays}} \tn % Row 0 \SetRowColor{LightBackground} array = {[}1, 2, 3, 4{]} & Array with numbers from 1 to 4 \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} array = {[}1...4{]} & Array with numbers from 1 to 3 \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} array = {[}1..3{]} & Array with numbers from 1 to 3 \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} array1 = array{[}1..3{]} & Create new array from three items from array \tn % Row Count 9 (+ 3) % Row 4 \SetRowColor{LightBackground} array{[}1..3{]} = {[}3, 2, 1{]} & Change three items of array \tn % Row Count 11 (+ 2) % Row 5 \SetRowColor{white} \seqsplit{ground\_coffee.reverse()} & Reverse elements in array \tn % Row Count 13 (+ 2) % Row 6 \SetRowColor{LightBackground} Math.max {[}12, 32, 11, 67, 1, 3{]}... & Max element of array \tn % Row Count 15 (+ 2) % Row 7 \SetRowColor{white} {[}1 ,2, 3{]}.concat {[} 4, 5, 6{]} & concatenating arrays \tn % Row Count 17 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.44333 cm} x{3.53367 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Operators and aliases}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{CoffeeScript}} & {\bf{JavaScript}} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} this, @ & this \tn % Row Count 3 (+ 1) % Row 2 \SetRowColor{LightBackground} is & === \tn % Row Count 4 (+ 1) % Row 3 \SetRowColor{white} isnt & !== \tn % Row Count 5 (+ 1) % Row 4 \SetRowColor{LightBackground} not & ! \tn % Row Count 6 (+ 1) % Row 5 \SetRowColor{white} and & \&\& \tn % Row Count 7 (+ 1) % Row 6 \SetRowColor{LightBackground} or & || \tn % Row Count 8 (+ 1) % Row 7 \SetRowColor{white} true, yes, on & true \tn % Row Count 10 (+ 2) % Row 8 \SetRowColor{LightBackground} false, no, off & false \tn % Row Count 12 (+ 2) % Row 9 \SetRowColor{white} of & in \tn % Row Count 13 (+ 1) % Row 10 \SetRowColor{LightBackground} in & find element in array {\emph{(No JS equivalent)}} \tn % Row Count 15 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}