#+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:
Download repo and point the emacs =init= (and =early-init.el=) file to
this configuration.

Or 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:
General key bindings and functions
- =M->= (=end-of-buffer=)
- =M-<= (=begin-of-buffer=)
- =C-x b= (=counsel-switch-buffer=)
- =C-x |= (=toggle-window-split=) toggle horizontal/vertical of 2 window split
- =C-x h= (=mark-whole-buffer=)
- =C-x TAB= (=indent-rigidly=) indent lines in the region
- =C-r= (=query-replace-regexp=) replace text
- =M-<up>= (=move-line-up=)
- =M-<down>= (=move-line-down=)
- =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 (current state) and file (saved state)
- =C-h f= (=helpful-callable=)
- =C-h v= (=helpful-variable=)
- =mouse-6= scroll right
- =mouse-7= scroll left
- =mouse-8= (=previous-buffer=)
- =mouse-9= (=next-buffer=)

Spelling (flyspell ispell) bindings and functions
- (=flyspell-mode=) toggle spelling
- (=flyspell-buffer=)
- =C-;= (=flyspell-correct-wrapper=)

** Org
:PROPERTIES:
:CUSTOM_ID: org
:END:
Org key bindings and functions
- =C-c |= (=org-table-create-or-convert-from-region=) convert seperator 1. TAB, 2. comma, 3. space
- =C-u C-c |= (=org-table-create-or-convert-from-region=) convert using comma (CSV) seperator
- =C-u C-u C-c |= (=org-table-create-or-convert-from-region=) convert using TAB
- =C-u <integer> C-c |= (=org-table-create-or-convert-from-region=) convert using N spaces
- =C-u REGEX C-c |= (=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 cell right
- =S-<left>= (=org-shiftleft=) move cell left
- =S-<up>= (=org-shiftup=) move cell up
- =S-<down>= (=org-shiftdown=) move cell down
- (=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>= (=my-org-export-html=)
- =<f6>= (=my-org-export-pdf=)
- =C-<f5>= (=my-org-export-html-async=)
- =C-<f6>= (=my-org-export-pdf-async=)
- =C-c C-e h h= (=org-html-export-to-html=)
- =C-c C-e T t= (=org-tufte-export-to-file=) HTML export with tufte syling
- =C-c C-e h a= (=my-org-article-html-export-to-html=) HTML-article file, see also Article export
- =C-c C-e l l= (=org-latex-export-to-pdf=)
- =C-c C-e l a= (=my-org-article-latex-export-to-pdf=) PDF-article file, see also Article export
- =C-c C-e l t= (=my-org-article-latex-export-to-letter=) PDF-letter file

*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

*** Template for an article export (HTML and LaTeX)
:PROPERTIES:
:CUSTOM_ID: export-article
:END:
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
# #+LATEX: \phantomsection\addcontentsline{toc}{section}{Abbildungsverzeichnis}\listoffigures
# #+TOC: figures is not implemented yet in the HTML backend. And not working with LaTeX, see listing
# #+TOC: figures

# #+LATEX: \listoftables
# #+LATEX: \phantomsection\addcontentsline{toc}{section}{Tabellenverzeichnis}
,#+TOC: tables

# for latex listing is figures
# #+LATEX: \phantomsection\addcontentsline{toc}{section}{Programmausdrucke}
,#+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

# For PDF/LaTeX export we do not want to use org-ref ox-bibtex, as its output is
# already defined in the preamble. The output for 'bibliography:references.bib'
# is something like '\bibliography{references}'
# reftex version
# bibliography:references.bib
# ox-bibtex version
# #+BIBLIOGRAPHY: references mbunsrtdin option:-a option:-unicode option:-nobibsource limit:t
,* References-en                                                       :ignore:
:PROPERTIES:
:VISIBILITY: folded
:END:
,#+LATEX: \newpage\thispagestyle{plain}
,#+LATEX: \sloppy\printbibliography
,#+LATEX: \begin{comment}
,#+BIBLIOGRAPHY: references acmu option:-a option:-unicode option:-nobibsource limit:t
,#+LATEX: \end{comment}

,* References-de                                                       :ignore:
:PROPERTIES:
:VISIBILITY: folded
:END:
,#+LATEX: \newpage\thispagestyle{plain}
,#+LATEX: \sloppy\printbibliography
,#+LATEX: \begin{comment}
,#+BIBLIOGRAPHY: references mbunsrtdin option:-a option:-unicode option:-nobibsource limit:t
,#+LATEX: \end{comment}

,* References-rott                                                     :ignore:
:PROPERTIES:
:VISIBILITY: folded
:END:
,#+LATEX: \newpage\thispagestyle{plain}
# all references from the bib
,#+LATEX: \nocite{*}
,#+BIBLIOGRAPHY: references rottbibsty option:-a option:-unicode option:-nobibsource
#+end_src

*** Template for a 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:
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
