#+TITLE: Emacs Configuration
#+HTML_DOCTYPE: xhtml
# xhtml for gogs needed, bug showing table in the footer, bc/ html5 creates <col> instead of <col />

This is an ongoing evolution of Emacs configuration files, inspired by
a bunch of online resources.

* Installation
  :PROPERTIES:
  :CUSTOM_ID: installation
  :END:
  Run one of the following install script commands (using curl, wget or fetch).
  #+begin_src sh
  sh -c "$(curl -fsSL http://gitea.weseng.de/daniel/emacs/raw/master/scripts/install.sh)"
  sh -c "$(wget -O- http://gitea.weseng.de/daniel/emacs/raw/master/scripts/install.sh)"
  sh -c "$(fetch -o - http://gitea.weseng.de/daniel/emacs/raw/master/scripts/install.sh)"
  #+end_src

  Installation path is =~/.config/emacs=. See details and other
  installed linux packages as requirements inside =sripts/install.sh=.

* Packages
  :PROPERTIES:
  :CUSTOM_ID: packages
  :END:
#+caption: General key bindings and functions
| M->       | end-of-buffer                 |                                           |
| M-<       | beginning-of-buffer           |                                           |
| C-x h     | mark-whole-buffer             | mark the whole buffer                     |
| C-x TAB   | indent-rigidly                | indent selected region                    |
| C-x RET f | set-buffer-file-coding-system | e. g. set to utf-8                        |
|           | decode-coding-region          | e. g. decode to utf-8 (郭富城Aaron Kwok)  |
|           | diff-buffer-with-file         | show a diff between buffer and file       |
| C-h v     | counsel-describe-variable     | help text of variable                     |
| C-h f     | counsel-describe-funtion      | help text of function                     |
| C-r       | query-replace-regexp          | replace text. (former isearch-backward)   |
| C-x C-b   | ibuffer                       | list buffers (former list-buffers)        |
| C-x \vert | toggle-window-split           | toggle horizontal/vertical 2 window split |
| M-up      | move-line-up                  | move current line up                      |
| M-down    | move-line-down                | move current line down                    |
| mouse-6   |                               | scroll right                              |
| mouse-7   |                               | scroll left                               |
| mouse-8   | previous-buffer               |                                           |
| mouse-9   | next-buffer                   |                                           |

** Org
   :PROPERTIES:
   :CUSTOM_ID: org
   :END:
#+caption: Org key bindings and functions
| C-c \vert           | org-table-create-or-convert-from-region | convert seperator 1. TAB, 2. comma, 3. space                                 |
| C-u C-c \vert       | org-table-create-or-convert-from-region | convert using comma (CSV) seperator                                          |
| C-u C-u C-c \vert   | org-table-create-or-convert-from-region | convert using TAB                                                            |
| C-u N C-c \vert     | org-table-create-or-convert-from-region | convert using N spaces                                                       |
| C-u REGEX C-c \vert | org-table-create-or-convert-from-region | convert using regex to match seperator                                       |
| C-c C-x \           | org-toggle-pretty-entries               | e. g. displays =\pm= as ±                                                    |
|                     |                                         |                                                                              |
| Org table           |                                         |                                                                              |
| S-right             | org-shiftright                          | move a single cell right                                                     |
| S-left              | org-shiftleft                           | move a single cell left                                                      |
| C-c SPC             | org-table-blank-field                   | clear cell                                                                   |
|                     |                                         |                                                                              |
| Org src block       |                                         |                                                                              |
| C-c C-v t           | org-babel-tangle                        | create a file with the content of the block, use in header: :tangle filename |
|                     |                                         |                                                                              |
| Org export          |                                         |                                                                              |
| f5                  |                                         | in org export to html                                                        |
| f6                  |                                         | in org export to LaTeX                                                       |

*Important*
- For *Gnuplot* source blocks: Do not use =%= inside Gnuplot source
  block but =\%= or in format command =\%%=
  - % starts a comment in LaTeX and therefore stops further
    interpretations like a closing bracket =}= etc.
    - Gnuplot graphics are imported as .tex (text, axis, legend) and
      .eps (figure) files.
  - =\%= =\%%= can also be used for HTML SVG export

*** HTML export
    :PROPERTIES:
    :CUSTOM_ID: export-html
    :END:
    - =C-c C-e h h= (org-html-export-to-html) to export Org document as HTML file, i.e. no spectial settings.
    - =C-c C-e T t= (org-tufte-export-to-file) to export Org document as Tufte-HTML file, i.e. with tufte syling.
    - =C-c C-e h a= (my-org-article-html-export-to-html) to export Org document as HTML-article file, see also Article export

*** LaTeX export
    :PROPERTIES:
    :CUSTOM_ID: export-latex
    :END:
    - =C-c C-e l l= (org-latex-export-to-pdf) to export Org document as PDF file, i.e. no spectial settings.
    - =C-c C-e l a= (my-org-article-latex-export-to-pdf) to export Org document as PDF-article file, see also Article export.
    - =C-c C-e l t= (my-org-article-latex-export-to-letter) to export Org document as PDF-letter file.

    Links
    - https://tex.stackexchange.com/questions/167583/include-custom-file-into-header-with-org-mode/201674
    - https://orgmode.org/manual/LaTeX-specific-export-settings.html

*** Article export (HTML and LaTeX)
    :PROPERTIES:
    :CUSTOM_ID: export-article
    :END:
    - =C-c C-e h a= (my-org-article-html-export-to-html) to export Org document as HTML-article file.
    - =C-c C-e l a= (my-org-article-latex-export-to-pdf) to export Org document as PDF-article file.

    Template for an article
    #+begin_src org
      # -*- ispell-local-dictionary: "english" -*-
      ,#+LANGUAGE: en
      ,#+TITLE: My article
      ,#+SUBTITLE: 
      ,#+AUTHOR: Daniel
      ,#+EMAIL: name@example.org
      ,#+DATE: May 12, 2021
      ,#+KEYWORDS: 
      ,#+DESCRIPTION:

      ,* Abstract                                                  :ignore:noexport:
      ,#+BEGIN_ABSTRACT
      ,*Abstract*\\
      This is the abstract of the article.
      ,#+END_ABSTRACT

      ,* List of contents & figures & tables & listings                     :ignore:
        :PROPERTIES:
        :VISIBILITY: folded
        :CLEARPAGE: t
        :END:
      ,#+LATEX: \begin{spacing}{1.25}\begingroup\renewcommand*{\addvspace}[1]{}
      ,#+LATEX: \clearpage
      # #+LATEX: \tableofcontents
      ,#+TOC: headlines
      ,#+LATEX: \clearpage
      ,#+LATEX: \listoffigures
      # #+TOC: figures is not implemented yet in the HTML backend. And not working with LaTeX, see listing
      # #+TOC: figures
      # #+LATEX: \listoftables
      ,#+TOC: tables
      # for latex listing is figures
      ,#+TOC: listings
      ,#+LATEX: \endgroup\end{spacing}

      ,* List of Symbols                                                    :ignore:
        :PROPERTIES:
        :CUSTOM_ID: list-of-symbols
        :UNNUMBERED: t
        :END:

      ,#+LATEX: \pagenumbering{arabic}\setcounter{page}{1}
    #+end_src

    Examples for an article
    #+begin_src org
      # -*- ispell-local-dictionary: "german" -*-
      ,#+LANGUAGE: de

      ,* Header not listed in toc                                           :ignore:
        bla bla bla

      ,* Section not exported                                             :noexport:
        bla bla bla, this will not be exported

      ,* Header listed unnumbered
        :PROPERTIES:
        :UNNUMBERED: t
        :END:
        bla bla bla

      ,* Section will start on a clear page (LaTeX)
        :PROPERTIES:
        :CLEARPAGE: t
        :END:
        bla bla bla
    #+end_src

*** Letter export (LaTex)
    :PROPERTIES:
    :CUSTOM_ID: export-letter
    :END:
    #+begin_src org
      # -*- ispell-local-dictionary: "german" -*-
      :FORM:
      ,#+LANGUAGE: de
      ,#+FROM_ASSOCIATION: XYZ AG
      ,#+FROM_NAME: Max Mustermann
      ,#+FROM_STREET: Regenbogenstrasse 7
      ,#+FROM_PLACE: 12345 Hamburg
      ,#+FROM_PHONE: 0123456789
      ,#+FROM_URL: www.beispiel.de
      ,#+FROM_EMAIL: mail@example.de

      ,#+TO_ASSOCIATION: Firma AG
      ,#+TO_NAME: Karl Marx
      ,#+TO_STREET: Firmstrasse 13
      ,#+TO_PLACE: Berlin

      ,#+PLACE: Hamburg
      ,#+DATE: \today
      # #+DATE: 3. Januar 2020
      :END:

      ,#+SUBJECT: Abrechnung
      ,#+SUBJECT: 2020
      ,#+SUBJECT_EXTRA: Kontonummer
      ,#+SUBJECT_EXTRA: März

      ,#+OPENING: Sehr geehte Frau \toname,

      hiermit sende ich Ihnen die angeforderten Unterlagen zu und ...

      ,#+CLOSING: MfG,

      ,#+ATTACHMENT: analage 1
      ,#+ATTACHMENT: anlage 2
      ,#+ATTACHMENT: analage 3
      ,#+ATTACHMENT: analage 6
    #+end_src
    
** Multiple cursors
   :PROPERTIES:
   :CUSTOM_ID: multiple-cursors
   :END:
#+caption: Multiple cursors key bindings and functions
| M-m s m a | mc/mark-all-dwim | try to mark all at point           |
| C-v       |                  | jump to next cursor                |
| M-v       |                  | jump to previous cursor            |
| C-'       |                  | hide/unhide lines without a cursor |

** Other packages
   :PROPERTIES:
   :CUSTOM_ID: other-packages
   :END:
- rainbow-mode.el :: https://elpa.gnu.org/packages/rainbow-mode.html
  rainbow-mode is a minor mode for Emacs which displays strings representing
  colors with the color they represent as background.

* Information
  :PROPERTIES:
  :CUSTOM_ID: information
  :END:
Interlock symlinks and auto-save files.
Be aware that symbolic links of the form “.#*” are not auto-save files
but interlocks to prevent the simultaneous editing of the same
file. See [[https://www.emacswiki.org/info-ref?find=Interlocking][Interlocking]] in the [[https://www.emacswiki.org/emacs/EmacsManual][EmacsManual]] for details.

* Errors
  :PROPERTIES:
  :CUSTOM_ID: errors
  :END:
- failed execution of bibtex2html
  - see bib2htmlxxxxxx.blg for errors, e.g.
    - I couldn't open style file acmu.bst
  - copy/merge the texmf directory into your home directory.
- when using this in an Org mode buffer:
  =#+HEADER: :fit yes :imagemagick yes :iminoptions -density 300=
  - can leads to:
    - =convert: attempt to perform an operation not allowed by the security policy `gs' @ error/delegate.c/ExternalDelegateCommand/378.=
    - =convert: no images defined `DESY_logo_tikz.png' @ error/convert.c/ConvertImageCommand/3282.=
  - edit =/etc/ImageMagick-7/policy.xml= and comment out
    - ~<policy domain="delegate" rights="none" pattern="gs" />~

* TODOs
  :PROPERTIES:
  :CUSTOM_ID: todos
  :END:
- Org / global configuration
  - Page formatting
    - Modify HTML styling
      - Printed page layout, white styled figures
  - Custom export function for HTML and \(\LaTeX\), with;
    - =Shift= - =<f5>=, =Shift= - =<f6>= with open file
  - delete temp. generated export files
- Figures
  - Gnuplot
    - plot transposed files/tables
    - preamble in function and call this function for every gnuplot block either
      manually or automatically with a hook?!
- Tables
  - Wrap Table in div element. For smartphone scrolling.
- Table of contents
  - \(\LaTeX\); currently headers with no-number property means not included in TOC
  - HTML; currently generated list, like lot and lol, are not included in toc
    but own headers without numbers are.
- Equation cancel/strike out with color line
  - hcancel[color]{}
  - Example: ~\(\hcancel[red]{f_{X_2}(x_2)}}\)~
  - Definition:
    - Preamle: ~#+LATEX_HEADER: \usepackage{cancel}~ \\
               ~#+LATEX_HEADER: \newcommand\hcancel[2][black]{\setbox0=\hbox{$#2$}%~ \\
               ~#+LATEX_HEADER: \rlap{\raisebox{.45\ht0}{\textcolor{#1}{\rule{\wd0}{1pt}}}}#2}~ \\
    - ~hcancel: [\"{\\\\setbox0=\\\\hbox{$#2$}\\\\rlap{\\\\raisebox{.45\\\\ht0}{\\\\textcolor{#1}{\\\\rule{\\\\wd0}{1pt}}}}#2}\",2]~
      #+Begin_example
MathJax.Ajax.config.path[\"Contrib\"] = \"https://cdn.mathjax.org/mathjax/contrib\";
MathJax.Hub.Register.StartupHook(\"TeX Jax Ready\",function () {
    MathJax.Hub.Insert(MathJax.InputJax.TeX.Definitions.macros,{
        cancel: [\"Extension\",\"cancel\"],
        bcancel: [\"Extension\",\"cancel\"],
        xcancel: [\"Extension\",\"cancel\"],
        cancelto: [\"Extension\",\"cancel\"]
    });
});
      #+End_example
