All Projects → alhassy → Cheatsheet

alhassy / Cheatsheet

Pretty cheat sheets, or ``reference cards'', obtainable from Org files.

Projects that are alternatives of or similar to Cheatsheet

Org Noter
Emacs document annotator, using Org-mode
Stars: ✭ 671 (+478.45%)
Mutual labels:  pdf, emacs, org-mode
Elispcheatsheet
Quick reference to the core language of Emacs ---Editor MACroS.
Stars: ✭ 186 (+60.34%)
Mutual labels:  cheatsheet, pdf, emacs
Cheatsheets
JavaScript and Node.js cheatsheets
Stars: ✭ 1,191 (+926.72%)
Mutual labels:  cheatsheet, pdf
Org Wild Notifier.el
Alert notifications for org-agenda
Stars: ✭ 84 (-27.59%)
Mutual labels:  emacs, org-mode
Ox Jira.el
Org-mode export backend for JIRA markup
Stars: ✭ 88 (-24.14%)
Mutual labels:  emacs, org-mode
Dmacs
Emacs Literate Configuration with borg
Stars: ✭ 74 (-36.21%)
Mutual labels:  emacs, org-mode
Org Kanban
Simple approach to kanban with emacs' org-mode
Stars: ✭ 74 (-36.21%)
Mutual labels:  emacs, org-mode
Fundamental Haskell
Fundamental Haskell book, to the point terse statements on Haskell, Category theory, and related fields. Encyclopedic pocketbook of meaning. Zen kōan-like meditations of understanding. For quick or memory curve spaced repetition learning.
Stars: ✭ 88 (-24.14%)
Mutual labels:  emacs, org-mode
Vscode Org Mode
Emacs Org Mode for Visual Studio Code
Stars: ✭ 1,096 (+844.83%)
Mutual labels:  emacs, org-mode
Ox Rst
reStructuredText Back-End for Org-Mode Export Engine
Stars: ✭ 94 (-18.97%)
Mutual labels:  emacs, org-mode
Organice
An implementation of Org mode without the dependency of Emacs - built for mobile and desktop browsers
Stars: ✭ 1,327 (+1043.97%)
Mutual labels:  emacs, org-mode
Weblorg
Static Site Generator for Emacs
Stars: ✭ 103 (-11.21%)
Mutual labels:  emacs, org-mode
Org Sticky Header
Show off-screen Org heading at top of window
Stars: ✭ 68 (-41.38%)
Mutual labels:  emacs, org-mode
Books Pdf
books pdf
Stars: ✭ 1,149 (+890.52%)
Mutual labels:  pdf, emacs
Org Zettelkasten
An opinionated setup for managing large collections of interlinked org files.
Stars: ✭ 77 (-33.62%)
Mutual labels:  emacs, org-mode
Org Web
org-mode on the web, built with React, optimized for mobile, synced with Dropbox and Google Drive
Stars: ✭ 1,133 (+876.72%)
Mutual labels:  emacs, org-mode
Emagicians Starter Kit
🐰 My own take on an Emacs Starter Kit, with Secret Alien Org Mode Superpowers. -|-+-|-
Stars: ✭ 85 (-26.72%)
Mutual labels:  emacs, org-mode
C Sharp Cheatsheet
C# Cheatsheet
Stars: ✭ 111 (-4.31%)
Mutual labels:  cheatsheet, pdf
Emacs Document
translate emacs documents to Chinese for convenient reference
Stars: ✭ 1,085 (+835.34%)
Mutual labels:  emacs, org-mode
.dot Org Files
Dotfiles, Emacs + Org-mode with babel and Literate programming.
Stars: ✭ 57 (-50.86%)
Mutual labels:  emacs, org-mode

Created 2019-07-12 Fri 21:25

#+OPTIONS: toc:nil d:nil #+OPTIONS: toc:nil d:nil #+TITLE: Easily Making CheatSheets with Org-mode #+AUTHOR: [[http://www.cas.mcmaster.ca/~alhassm/][Musa Al-hassy]] #+export_file_name: README.org

Pretty cheat sheets, or “reference cards”, obtainable from Org-mode files. See section [[#getting-started]] below to get started making your own cheat sheets!

The listing sheet, as PDF, can be found [[file:CheatSheet.pdf][here]], or as a [[file:CheatSheet_Portrait.pdf][single column portrait]], while below is an unruly html rendition.

This reference sheet is built from a [[https://github.com/alhassy/CheatSheet][CheatSheets with Org-mode]] system.

#+toc: headlines 2 #+subtitle: ---Reference Sheet for “What I'm Currently Learning”--- #+macro: blurb Pretty cheat sheets, or “reference cards”, obtainable from Org-mode files. See section [[#getting-started]] below to get started making your own cheat sheets!

#+latex_header: \usepackage{titling,parskip} #+latex_header: \usepackage{eufrak} % for mathfrak fonts #+latex_header: \usepackage{multicol,xparse,newunicodechar}

#+latex_header: \usepackage{etoolbox}

#+latex_header: \newif\iflandscape #+latex_header: \landscapetrue

#+latex_header_extra: \iflandscape \usepackage[landscape, margin=0.5in]{geometry} \else \usepackage[margin=0.5in]{geometry} \fi

#+latex_header: \def\cheatsheetcols{2} #+latex_header: \AfterEndPreamble{\begin{multicols}{\cheatsheetcols}} #+latex_header: \AtEndDocument{ \end{multicols} }

#+latex_header: \let\multicolmulticols\multicols #+latex_header: \let\endmulticolmulticols\endmulticols #+latex_header: \RenewDocumentEnvironment{multicols}{mO{}}{\ifnum#1=1 #2 \def\columnbreak{} \else \multicolmulticols{#1}[#2] \fi}{\ifnum#1=1 \else \endmulticolmulticols\fi}

#+latex_header: \def\maketitle{}

#+latex: \fontsize{9}{10}\selectfont

#+latex_header_extra: \newcommand\textbox[1]{\parbox{.333\textwidth/\cheatsheetcols}{#1}}

#+latex_header: \def\yoururl{}

#+latex_header: \usepackage[dvipsnames]{xcolor} % named colours #+latex: \definecolor{grey}{rgb}{0.5,0.5,0.5}

#+latex_header: \usepackage{color} #+latex_header: \definecolor{darkgreen}{rgb}{0.0, 0.3, 0.1} #+latex_header: \definecolor{darkblue}{rgb}{0.0, 0.1, 0.3} #+latex_header: \hypersetup{colorlinks,linkcolor=darkblue,citecolor=darkblue,urlcolor=darkgreen}

#+latex_header: \setlength{\parindent}{0pt}

#+latex_header: \def\cheatsheetitemsep{-0.5em} #+latex_header: \let\olditem\item #+latex_header_extra: \def\item{\vspace{\cheatsheetitemsep}\olditem}

#+latex_header: \usepackage{UnicodeSymbols}

#+latex_header: \makeatletter #+latex_header: \AtBeginEnvironment{minted}{\dontdofcolorbox} #+latex_header: \def\dontdofcolorbox{\renewcommand\fcolorbox[4][]{##4}} #+latex_header: \makeatother

#+latex_header: \RequirePackage{fancyvrb} #+latex_header: \DefineVerbatimEnvironment{verbatim}{Verbatim}{fontsize=\scriptsize}

#+latex_header: \def\yoururl{https://github.com/alhassy/CheatSheet}

#+latex_header: \def\cheatsheetcols{2} #+latex_header: \landscapetrue #+latex_header: \def\cheatsheetitemsep{-0.5em}

#+latex_header: \newunicodechar{𝑻}{\ensuremath{T}} #+latex_header: \newunicodechar{⊕}{\ensuremath{\oplus}} #+latex_header: \newunicodechar{≈}{\ensuremath{\approx}}

#+begin_quote

  • [[#extra-local-setup][Extra, Local, Setup]]
  • [[#project-goal][Project Goal]]
  • [[#cheatsheet-examples][CheatSheet Examples]]
  • [[#why-learn--relearn][Why Learn & Relearn?]]
  • [[#getting-started][Getting Started]]
  • [[#what-if-its-not-good-enough][What if it's not good enough?]]
  • [[#what-if-i-want-n-columns-or-non-landscape-or-multiple-formats][What if I want N columns? Or non-landscape? Or multiple formats?]]
  • [[#colourful-source-blocks][Colourful Source Blocks]]
  • [[#break][break]]
  • [[#basic-equational-support][Basic Equational Support]]
  • [[#unicode][Unicode]]
  • [[#parallel-environment][Parallel Environment]]
  • [[#break-1][break]]
  • [[#subsection-support][Subsection Support]]
    • [[#a-new-child-tree][A new child tree]]
    • [[#another-child-tree][Another child tree]]
  • [[#making-readmeorg][Making README.org]] #+end_quote
  • Project Goal

#+latex: \hspace{-12pt} /Use the elegant & intuitive Org-mode syntax to produce exquisite reference sheets./

  • For example, the boxed section headers here are produced from usual Org headers, as in * my section; and one may use [[https://github.com/jkitchin/org-ref][org-ref]] for citations, as in nameref:name

#+latex: \vspace{-1em} Read [[https://orgmode.org/worg/org-tutorials/org4beginners.html][Org-mode for beginners]] for a refresher!

  • For more see [[https://orgmode.org/orgguide.pdf][The Compact Org-mode Guide]].

Execute C-c C-e l o or M-x compile to produce a nice looking PDF of your reference sheet.

#+latex: \vspace{-0em} #+begin_center /To learn more, manipulating this source is the way to go!/ #+end_center

  • CheatSheet Examples

Reference sheets created from this project include:

  • [[https://github.com/alhassy/ElispCheatSheet][ElispCheatSheet]] :: Quick reference to the core language of Emacs ---Editor MACroS.

  • [[https://github.com/alhassy/islam][Islam]] :: Important figures in the faith.

  • [[https://github.com/alhassy/PrologCheatSheet][PrologCheatSheet]] :: Program where everything is a relation ---i.e., a database table.

  • [[https://github.com/alhassy/CatsCheatSheet][CatsCheatSheet]] :: Listing of common theorems in elementary category theory.

  • [[https://github.com/alhassy/LatticesCheatSheet][LatticesCheatSheet]] :: Reference sheet for definitions and results in Lattice Theory.

  • [[https://github.com/alhassy/OCamlCheatSheet][OCamlCheatSheet]] :: Basics of OCaml, “the best imperative language”.

  • [[https://github.com/alhassy/CoqCheatSheet][CoqCheatSheet]] :: Reference sheet for the Coq language.

  • [[https://github.com/alhassy/GojuRyuCheatSheet][GojuRyuCheatSheet]] :: A quick cheat sheet for common terms in Goju Ryu Karate ---the hard-soft style of karate.

#+latex: \vspace{0.5em} #+begin_center /If you use this org-setup to produce a neat cheat sheet, please let me know!/ #+end_center

#+latex: \vspace{-0.5em}

  • Why Learn & Relearn?

/The world of ideas is not revealed to us in one stroke;/ /we must both permanently and unceasingly recreate it in/ /our consciousness./ ---Rene Thom

I think org-mode is ideal for computing cheat sheets especially since it allows us to use org-babel tangle to have small minimal working examples that go along with the ideas.

#+begin_quote /‘Why’, said the Dodo, ‘the best way to explain it is to do it.’/ \newline ---Alice's Adventures in Wonderland #+end_quote

/A good stock of examples, as large as possible, is indispensable/ /for a thorough understanding of any concept, and when I want to/ /learn something new, I make it my first job to build one./ ---Paul Halmos

  • Getting Started To use this project for your own cheatsheets, just copy-paste the following into, say, the scratch buffer then C-x C-e after the final closing parenthesis.

#+begin_src emacs-lisp :tangle no (let ((your-repo "~/example") ;; Alter this location! (enable-local-variables :all)) ;; Look at my “local variables” below; ensure nothing malicious. ;; So no need to be queried about loading them.

;; Obtain the submodule then make a /copy/ of this cheatsheet. (eshell-command (concat " cd " your-repo "; git submodule add https://github.com/alhassy/CheatSheet.git" "; cp CheatSheet/CheatSheet.org ." ))

;; Make your cheat sheet refer to the submodule's setup file. (find-file-other-window (concat your-repo "/CheatSheet.org")) (beginning-of-buffer) (re-search-forward "INCLUDE: CheatSheetSetup.org" nil t) (replace-match "INCLUDE: CheatSheet/CheatSheetSetup.org") (beginning-of-buffer) )

;; To remove a submodule: ;; git submodule deinit ⟪path_to_submodule⟫ ; git rm ⟪path_to_submodule⟫ #+end_src

For the README.md to be generated as desired, fill in the macros URL and blurb at the top of this org file to point to your repository and provide a description of what the cheatsheet serves to accomplish.

Keep your submodule up to date by running the following command from the parent project ---i.e., your project. #+begin_src shell :tangle no git submodule update #+end_src

Alternatively:

  1. Go to the repo where you want to make a cheat sheet.

  2. Add this project as a submodule then copy its core to where you're working: #+begin_src shell :tangle no git submodule add https://github.com/alhassy/CheatSheet.git ; cp CheatSheet/CheatSheet.org . ; cp CheatSheet/README.org . #+end_src

  3. Open CheatSheet.org and locate #+INCLUDE: CheatSheetSetup.org then rewrite CheatSheetSetup.org to CheatSheet/CheatSheetSetup.org.

  • What if it's not good enough?

/“The person who thinks of doing something, is usually passed by the person doing it.”/

/The more that you read, the more things you will know./ /The more that you learn, the more places you'll go./ ---Dr. Seuss

  • What if I want N columns? Or non-landscape? Or multiple formats?

At the top, say after the #+INCLUDE: CheatSheet/CheatSheetSetup.org line, add the following.

#+begin_example org :tangle no ,#+LATEX_HEADER: \def\cheatsheetcols{N} ,#+LATEX_HEADER: \landscapefalse #+end_example

For example, having three narrow columns is useful for term-heavy or formula heavy sheets. In contrast, dense sheets may appear less daunting when rendered as single-column in portrait. Sometimes a double-column portrait is more appropriate.

Press C-c C-c on the following incantation to produce a single column portrait of the cheat sheet. #+name: make-portrait #+begin_src emacs-lisp :results none (with-temp-buffer (insert "#+EXPORT_FILE_NAME: CheatSheet_Portrait.pdf ,#+LATEX_HEADER_EXTRA: \landscapefalse \def\cheatsheetcols{1} ,#+INCLUDE: CheatSheet.org ")

(let ((org-export-use-babel nil))
  (org-mode)
  (org-latex-export-to-pdf)
  )

) #+end_src

  • Colourful Source Blocks

Invoke the following with C-c C-c, or better yet place it in your [[https://alhassy.github.io/init/][Emacs configuration]], to ensure references are picked up and source code highlighting is turned on using the Minted package ---which in turn requires the pygmentize system tool.

#+begin_src emacs-lisp (setq org-latex-listings 'minted org-latex-packages-alist '(("" "minted")) org-latex-pdf-process '("pdflatex -shell-escape -output-directory %o %f" "biber %b" "pdflatex -shell-escape -output-directory %o %f" "pdflatex -shell-escape -output-directory %o %f")) #+end_src

For faster pdf generation, consider invoking:

#+begin_src emacs-lisp (setq org-latex-pdf-process '("pdflatex -interaction nonstopmode -output-directory %o %f")) #+end_src

By default, Org exports LaTeX using the nonstopmode option, which tries its best to produce a PDF ---which ignores typesetting errors altogether, and therefore is not necessarily ideal when using LaTeX.

#+latex: \columnbreak

  • Basic Equational Support

\eqn{name}{formula} yields a displayed equation with formula left aligned and name right aligned:

#+latex: \vspace{-0.7em} \eqn{name}{formula} Moreover, we can refer to such a formula by invoking \ref{name} ---e.g., \ref{Functoriality} and \ref{name}. However, if name involves unicode symbols, then this may cause problems.

See the [[https://github.com/alhassy/CatsCheatSheet][CatsCheatSheet]] for examples of this kind.

We may also use [[https://github.com/jkitchin/org-ref][org-ref]] style references, as in eqref:name. However, org-ref may warn that no context for the reference is found ---that's okay.

  • eqref :: Parenthesised reference: eqref:name
  • autoref :: Prefix reference with type: autoref:name
  • nameref :: The name of the section that contains this reference: nameref:name

#+latex: \vspace{-3em}

  • Unicode

I tend to use a lot of unicode and so this project comes with a unicode style file. We may add additional support for unicode characters as follows. #+begin_example org ,#+LATEX_HEADER: \newunicodechar{⊕}{\ensuremath{\oplus}} #+end_example

Below we demonstrate that [[https://frama-c.com/][loops implement finite quantifications]] by showing how the specification of a loop is implemented, unsurprisingly, using a loop.

A finite quantification can be defined axiomatically by the empty-range rule and split-off term rules. Together these form a recursive definition which can be phrased as a loop.

#+begin_parallel #+begin_src c // For : 𝑻 → 𝑻 → 𝑻, // fold(A,a,b) ≈ (⊕ x:a..b-1 • A[x]) /@ axiomatic Fold { @ @ logic 𝑻 @ fold{L}(𝑻 A, ℤ a, ℤ b) @ reads a,b,A, A[..] ; @ @ axiom foldEmptyRange{L} : @ ∀ 𝑻 A, ℤ a, b; a ≥ b @ ⇒ fold(A,a,b) ≡ identity(⊕); @ @ axiom foldSplitOffTerm{L} : @ ∀ 𝑻 A, ℤ a, b; a ≤ b @ ⇒ fold(A, a, b+1) @ ≡ fold(A, a, b ) ⊕ A[b]; @ } @/ #+end_src #+latex: \columnbreak #+begin_src c /@ requires \valid(A+(0..N-1)); @ assigns \nothing; @ ensures \result ≡ fold(A,0,N); @/ 𝑻 fold(int N, 𝑻 A) {

𝑻 total = identity(⊕);

/*@ loop invariant
         0 ≤ n ≤ N
      ∧  total ≡ fold(A,0,n);
  @ loop assigns n, total;
  @ loop variant N - n;
,*/
for(int n = 0; n != N; n++)
  total = total ⊕ A[n];
return total;

} #+end_src #+end_parallel

#+latex: \vspace{-0.5em}

This pseudo-code is reified by giving concrete values for (𝑻, ⊕, identity) such as (int, +, 0) or (bool, ||, false). Any [[https://en.wikipedia.org/wiki/Monoid][monoid]] will do.

#+latex: \ifnum\cheatsheetcols=1 \newpage \else \fi

  • Parallel Environment

Cheat sheets should not waste space, so the setup provides a parallel LaTeX enviornment that takes an optional parameter indicating how many columns are desired ---two by default. Importantly, we use this environment as if it were any normal org-block:

#+begin_parallel #+begin_example org :tangle no ,#⸲ ,#+begin_parallel org ???content here??? ,#+end_parallel #+end_example

The initial new line is important, otherwise the parallel environment occurs in-line, which may not be the intended behaviour. #+end_parallel

The column break is automatic, but as this is sugar for a minipage containing a multicolum we can force a column separation with \columnbreak.

parallelNB produces a side-by-side rendition with ‘N’o ‘B’ar:

#+begin_parallelNB left \newline left \newline left

#+latex: \columnbreak right \newline right \newline right #+end_parallelNB

Here is an example with four columns:

#+begin_parallel left \newline left \newline left

#+latex: \columnbreak middle \newline middle \newline middle

#+latex: \columnbreak middle \newline middle \newline middle

#+latex: \columnbreak right \newline right \newline right #+end_parallel

Here is an example with three columns and ‘n’o ‘b’ar:

#+begin_parallel3NB left \newline left \newline left

#+latex: \columnbreak middle \newline middle \newline middle

#+latex: \columnbreak right \newline right \newline right #+end_parallel3NB

#+latex: \vfill {\color{white}.}

#+latex: \ifnum\cheatsheetcols=1 \newpage \else \columnbreak \fi

  • Subsection Support Ideally a cheat sheet is not too hierarchical and so a subsection, as in ** child, is turned into a rule as follows.

** A new child tree

Here is the first child's content.

** Another child tree

Here is the sibling's content.

  • Making README.org

Evaluate the following source block with C-c C-c to produce a README file.

#+name: make-readme #+begin_src emacs-lisp (with-temp-buffer (insert "#+EXPORT_FILE_NAME: README.org # HTML:

Easily Making CheatSheets with Org-mode

,#+OPTIONS: toc:nil d:nil # Toc is displayed below at a strategic position.
 {{{blurb}}}

 :Hide:
 This project is to contain a listing of common results in X Theory.

 ,*The repo contains other articles I've written on X Theory;*
 ,*which may be read in a blog-format at:*
 https://alhassy.github.io/blog/categories/#Xtheory
 :End:

,*The listing sheet, as PDF, can be found
 [[file:CheatSheet.pdf][here]]*,
 or as a [[file:CheatSheet_Portrait.pdf][single column portrait]],
 while below is an unruly html rendition.

 # Markdown links: [title](target)

 This reference sheet is built from a
 [[https://github.com/alhassy/CheatSheet][CheatSheets with Org-mode]]
 system.

 ,#+TOC: headlines 2
 ,#+INCLUDE: CheatSheet.org
")

;; No code execution on export
;; ⟪ For a particular block, we use “:eval never-export” ⟫
;;
(let ((org-export-use-babel nil))
  (org-mode)
  ; (org-md-export-to-markdown)
  ; (package-install 'toc-org)
  (toc-org-mode)
  (toc-org-insert-toc)
  ; (delete "TOC" org-export-exclude-tags)
  (pop org-export-exclude-tags)
  (org-org-export-to-org)
  (add-to-list 'org-export-exclude-tags "TOC")
  )

) #+end_src

Note that the blurb macro is defined by the user, to provide a terse description of the project.

  • Think the one-line statement at the top of a github repo page.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].