Archive for the ‘LaTeX’ Category.

Using individual glyphs from a OpenType Font in LuaLaTeX

I am currently preparing a tutorial on the Texas Instruments BAII Plus Professional Calculator in LaTeX. TI provides the font for the different keystrokes as TTF and PFB/PFM which makes it way easier to typeset the symbols.

The first step was to convert the font to OTF format. I tried TTF 2 OTF first without luck as the resulting OTF did not have any symbols in it. Using PFB 2 OTF worked better, the generated OTF had supposedly all the keys in it.

In the next step I wanted to generate an LaTeX overview of all symbols. Using the information from https://tex.stackexchange.com/questions/103704/how-to-properly-install-and-use-a-new-font-with-lualatex and https://tex.stackexchange.com/questions/25249/how-do-i-use-a-particular-font-for-a-small-section-of-text-in-my-document/37251 I came up with the following (don’t forget to install the OTF before!):

\documentclass[11pt]{article}
 
\usepackage[left=1cm,right=1cm,landscape,a4paper]{geometry}
\usepackage{fontspec}
 
\newfontfamily\tifont{BA2Plus Symbols}
 
\usepackage{luacode}
\usepackage{longtable,array,xcolor,listings}
\begin{luacode*} 
function print_glyphs(maxCols,maxChars) 
  local id = font.current()         -- geht Font ID
  local fnt = font.getfont(id)
  local col = 1
  local maxU4 = 15*(16^3+16^2+16+1)
  a = {}
  for k, v in pairs(fnt.characters) do
    a [#a + 1] = k
  end
  table.sort(a)
  for i, k in ipairs(a) do
    if i >= maxChars then break end
    if col == 1 then
      if k > maxU4 then
        tex.sprint(string.format("U+%06x", k))
      else
        tex.sprint(string.format("U+%04x", k))
      end
      tex.sprint("&") 
    end
    if (i) then
      tex.sprint(string.format([[\char%i]], k))
    else
     tex.sprint("~")
    end
    if col == maxCols then              -- Line finished?
      tex.sprint([[\\\cline{2-]] .. maxCols+1 .. "} ")  -- Yes
      col = 1                           -- newline
    else
      tex.sprint("&")                   -- no, Print &
      col = col + 1                     -- next column
    end
  end
end
\end{luacode*}
 
 
\begin{document}
 
{\tifont
\begin{longtable}{>{\color{black!50}\ttfamily\footnotesize}r|
                  *{10}{>{\color{black}}p{5em}|}}
\cline{2-11}
\endhead
 
\directlua{print_glyphs(10,65463)} \\ \cline{2-11}
\end{longtable}}
 
\end{document}

PDF

The next step then was to create a logic of how to address the different symbols. Of course TSX was helpful again (https://tex.stackexchange.com/questions/38402/how-to-pick-a-specific-symbol-from-a-specific-font):

\documentclass[twocolumn]{article}
\usepackage{fontspec}
\usepackage[top=4cm,left=2cm,right=2cm,bottom=2cm]{geometry}
\newfontfamily\tifont{BA2Plus Symbols}
\newcommand\tif[1]{{\tifont\symbol{#1}}}
\usepackage{fonttable}
 
\begin{document}
\twocolumn
 
33  >  \tif{33}
 
34  >  \tif{34}
 
...
 
124  >  \tif{124}
 
125  >  \tif{125}
 
\end{document}

PDF

The next step is to come up with a convenient way of addressing the glyphs, e.g. by creating aliases for each glyph.

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

LaTeX Beamer Beispiel mit Metropolis und IBM Plex

Hier ein Beispiel für das Beamer Metropolis Theme mit IBM Plex Schrift:

\documentclass[12pt,ngerman]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{babel}
\usepackage{graphicx}
\usepackage{csquotes}
\usepackage{xcolor}
 
 
\usepackage[sfdefault]{plex-sans}
\usetheme[progressbar=frametitle]{metropolis}           % Use metropolis theme
 
\title{A minimal Metropolis + IBM Plex example}
\date{\today}
\author{Max Mustermann}
\institute{The Name of the Institute}
 
\makeatletter
\setlength{\metropolis@titleseparator@linewidth}{1pt}
\setlength{\metropolis@progressonsectionpage@linewidth}{1pt}
\setlength{\metropolis@progressinheadfoot@linewidth}{1pt}
\makeatother
 
\begin{document}
 
\begin{frame}
	 \maketitle
\end{frame}
 
\begin{frame}
\frametitle{Introduction}
\framesubtitle{~}
 
\[ a^2 + b^2 = c^2 \]
 
\begin{itemize}
\item 
\item 
\item 
\item 
\item 
\item 
\end{itemize}
\end{frame}
 
\end{document}

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Jahreskalender mit LaTeX & TikZ

Hier ein zusammengefrickeltes Beispiel für einen TikZ-basierten Jahreskalender. „Zusammengefrickelt“ deshalb, weil es bestimmt über die TikZ- und pgf-Kalenderfunktionen viel einfacher und eleganter geht. Letzlich tut es aber 😉

Kalender_2018 (auch wenn das PDF im Namen „2017“ trägt)

\documentclass[fontsize=6pt]{scrartcl}
\usepackage[a4paper,landscape,left=0.5cm,right=0.5cm,top=0.5cm,bottom=0.5cm]{geometry}
 
\usepackage[]{ifdraft}
\usepackage[]{attachfile}
\usepackage[]{eso-pic}
 
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
 
\renewcommand{\familydefault}{\sfdefault}
\RequirePackage[scaled=0.9]{helvet}
\usepackage{tikz}
\usepackage[right]{showlabels}
\usetikzlibrary{positioning}
\pagestyle{empty}
 
\usepackage{xcolor}
 
\usepackage{hyperref}
\usepackage{url}
 
\definecolor{weekendday}{RGB}{220,220,220}
\newcommand{\file}[1]{\textattachfile{#1}{\textcolor{blue}{\LaTeX\ Sourcecode}}}
 
\begin{document}  
 
\AddToShipoutPictureFG*{
  \put(35,10){\footnotesize Uwe Ziegenhagen, ziegenhagen@gmail.com, \file{\jobname.tex}	
}
}
 
\begin{center}
\begin{tikzpicture}
[
    x=23mm,y=6mm,
    mybox/.style={rectangle,rounded corners,minimum width=23mm, minimum height=6mm},
	month/.style={mybox,align=center,draw=black,fill=yellow,thick,font=\bfseries\Large},
    date/.style={mybox,draw=gray,fill=yellow,align=left,thick,minimum width=5mm,font=\bfseries\Large},
    day/.style={mybox,draw=black,align=left},
    weekendday/.style={mybox,draw=black,align=left,fill=weekendday}
]
\node at (0,0) [month] {Januar};
\node at (1,0) [month] {Februar};
\node at (2,0) [month] {März};
\node at (3,0) [month] {April};
\node at (4,0) [month] {Mai};
\node at (5,0) [month] {Juni};
\node at (6,0) [month] {Juli};
\node at (7,0) [month] {August};
\node at (8,0) [month] {September};
\node at (9,0) [month] {Oktober};
\node at (10,0) [month] {November};
\node at (11,0) [month] {Dezember};
 
\node at (-0.6,-1) [date] {01};
\node at (-0.6,-2) [date] {02};
\node at (-0.6,-3) [date] {03};
\node at (-0.6,-4) [date] {04};
\node at (-0.6,-5) [date] {05};
\node at (-0.6,-6) [date] {06};
\node at (-0.6,-7) [date] {07};
\node at (-0.6,-8) [date] {08};
\node at (-0.6,-9) [date] {09};
\node at (-0.6,-10) [date] {10};
\node at (-0.6,-11) [date] {11};
\node at (-0.6,-12) [date] {12};
\node at (-0.6,-13) [date] {13};
\node at (-0.6,-14) [date] {14};
\node at (-0.6,-15) [date] {15};
\node at (-0.6,-16) [date] {16};
\node at (-0.6,-17) [date] {17};
\node at (-0.6,-18) [date] {18};
\node at (-0.6,-19) [date] {19};
\node at (-0.6,-20) [date] {20};
\node at (-0.6,-21) [date] {21};
\node at (-0.6,-22) [date] {22};
\node at (-0.6,-23) [date] {23};
\node at (-0.6,-24) [date] {24};
\node at (-0.6,-25) [date] {25};
\node at (-0.6,-26) [date] {26};
\node at (-0.6,-27) [date] {27};
\node at (-0.6,-28) [date] {28};
\node at (-0.6,-29) [date] {29};
\node at (-0.6,-30) [date] {30};
\node at (-0.6,-31) [date] {31};
 
\node at (0,-1) [day] {};
\node at (0,-2) [day] {};
\node at (0,-3) [day] {};
\node at (0,-4) [day] {};
\node at (0,-5) [day] {};
\node at (0,-6) [weekendday] {};
\node at (0,-7) [weekendday] {};
\node at (0,-8) [day] {};
\node at (0,-9) [day] {};
\node at (0,-10) [day] {};
\node at (0,-11) [day] {};
\node at (0,-12) [day] {};
\node at (0,-13) [weekendday] {};
\node at (0,-14) [weekendday] {};
\node at (0,-15) [day] {};
\node at (0,-16) [day] {};
\node at (0,-17) [day] {};
\node at (0,-18) [day] {};
\node at (0,-19) [day] {};
\node at (0,-20) [weekendday] {};
\node at (0,-21) [weekendday] {};
\node at (0,-22) [day] {};
\node at (0,-23) [day] {};
\node at (0,-24) [day] {};
\node at (0,-25) [day] {};
\node at (0,-26) [day] {};
\node at (0,-27) [weekendday] {};
\node at (0,-28) [weekendday] {};
\node at (0,-29) [day] {};
\node at (0,-30) [day] {};
\node at (0,-31) [day] {};
 
 
\node at (1,-1) [day] {};
\node at (1,-2) [day] {};
\node at (1,-3) [weekendday] {};
\node at (1,-4) [weekendday] {};
\node at (1,-5) [day] {};
\node at (1,-6) [day] {};
\node at (1,-7) [day] {};
\node at (1,-8) [day] {};
\node at (1,-9) [day] {};
\node at (1,-10) [weekendday] {};
\node at (1,-11) [weekendday] {};
\node at (1,-12) [day] {};
\node at (1,-13) [day] {};
\node at (1,-14) [day] {};
\node at (1,-15) [day] {};
\node at (1,-16) [day] {};
\node at (1,-17) [weekendday] {};
\node at (1,-18) [weekendday] {};
\node at (1,-19) [day] {};
\node at (1,-20) [day] {};
\node at (1,-21) [day] {};
\node at (1,-22) [day] {};
\node at (1,-23) [day] {};
\node at (1,-24) [weekendday] {};
\node at (1,-25) [weekendday] {};
\node at (1,-26) [day] {};
\node at (1,-27) [day] {};
\node at (1,-28) [day] {};
 
 
 
\node at (2,-1) [day] {};
\node at (2,-2) [day] {};
\node at (2,-3) [weekendday] {};
\node at (2,-4) [weekendday] {};
\node at (2,-5) [day] {};
\node at (2,-6) [day] {};
\node at (2,-7) [day] {};
\node at (2,-8) [day] {};
\node at (2,-9) [day] {};
\node at (2,-10) [weekendday] {};
\node at (2,-11) [weekendday] {};
\node at (2,-12) [day] {};
\node at (2,-13) [day] {};
\node at (2,-14) [day] {};
\node at (2,-15) [day] {};
\node at (2,-16) [day] {};
\node at (2,-17) [weekendday] {};
\node at (2,-18) [weekendday] {};
\node at (2,-19) [day] {};
\node at (2,-20) [day] {};
\node at (2,-21) [day] {};
\node at (2,-22) [day] {};
\node at (2,-23) [day] {};
\node at (2,-24) [weekendday] {};
\node at (2,-25) [weekendday] {};
\node at (2,-26) [day] {};
\node at (2,-27) [day] {};
\node at (2,-28) [day] {};
\node at (2,-29) [day] {};
\node at (2,-30) [day] {};
\node at (2,-31) [weekendday] {};
 
\node at (3,-1) [weekendday] {};
\node at (3,-2) [day] {};
\node at (3,-3) [day] {};
\node at (3,-4) [day] {};
\node at (3,-5) [day] {};
\node at (3,-6) [day] {};
\node at (3,-7) [weekendday] {};
\node at (3,-8) [weekendday] {};
\node at (3,-9) [day] {};
\node at (3,-10) [day] {};
\node at (3,-11) [day] {};
\node at (3,-12) [day] {};
\node at (3,-13) [day] {};
\node at (3,-14) [weekendday] {};
\node at (3,-15) [weekendday] {};
\node at (3,-16) [day] {};
\node at (3,-17) [day] {};
\node at (3,-18) [day] {};
\node at (3,-19) [day] {};
\node at (3,-20) [day] {};
\node at (3,-21) [weekendday] {};
\node at (3,-22) [weekendday] {};
\node at (3,-23) [day] {};
\node at (3,-24) [day] {};
\node at (3,-25) [day] {};
\node at (3,-26) [day] {};
\node at (3,-27) [day] {};
\node at (3,-28) [weekendday] {};
\node at (3,-29) [weekendday] {};
\node at (3,-30) [day] {};
 
\node at (4,-1) [day] {};
\node at (4,-2) [day] {};
\node at (4,-3) [day] {};
\node at (4,-4) [day] {};
\node at (4,-5) [weekendday] {};
\node at (4,-6) [weekendday] {};
\node at (4,-7) [day] {};
\node at (4,-8) [day] {};
\node at (4,-9) [day] {};
\node at (4,-10) [day] {};
\node at (4,-11) [day] {};
\node at (4,-12) [weekendday] {};
\node at (4,-13) [weekendday] {};
\node at (4,-14) [day] {};
\node at (4,-15) [day] {};
\node at (4,-16) [day] {};
\node at (4,-17) [day] {};
\node at (4,-18) [day] {};
\node at (4,-19) [weekendday] {};
\node at (4,-20) [weekendday] {};
\node at (4,-21) [day] {};
\node at (4,-22) [day] {};
\node at (4,-23) [day] {};
\node at (4,-24) [day] {};
\node at (4,-25) [day] {};
\node at (4,-26) [weekendday] {};
\node at (4,-27) [weekendday] {};
\node at (4,-28) [day] {};
\node at (4,-29) [day] {};
\node at (4,-30) [day] {};
\node at (4,-31) [day] {};
 
\node at (5,-1) [day] {};
\node at (5,-2) [weekendday] {};
\node at (5,-3) [weekendday] {};
\node at (5,-4) [day] {};
\node at (5,-5) [day] {};
\node at (5,-6) [day] {};
\node at (5,-7) [day] {};
\node at (5,-8) [day] {};
\node at (5,-9) [weekendday] {};
\node at (5,-10) [weekendday] {};
\node at (5,-11) [day] {};
\node at (5,-12) [day] {};
\node at (5,-13) [day] {};
\node at (5,-14) [day] {};
\node at (5,-15) [day] {};
\node at (5,-16) [weekendday] {};
\node at (5,-17) [weekendday] {};
\node at (5,-18) [day] {};
\node at (5,-19) [day] {};
\node at (5,-20) [day] {};
\node at (5,-21) [day] {};
\node at (5,-22) [day] {};
\node at (5,-23) [weekendday] {};
\node at (5,-24) [weekendday] {};
\node at (5,-25) [day] {};
\node at (5,-26) [day] {};
\node at (5,-27) [day] {};
\node at (5,-28) [day] {};
\node at (5,-29) [day] {};
\node at (5,-30) [weekendday] {};
 
 
\node at (6,-1) [weekendday] {};
\node at (6,-2) [day] {};
\node at (6,-3) [day] {};
\node at (6,-4) [day] {};
\node at (6,-5) [day] {};
\node at (6,-6) [day] {};
\node at (6,-7) [weekendday] {};
\node at (6,-8) [weekendday] {};
\node at (6,-9) [day] {};
\node at (6,-10) [day] {};
\node at (6,-11) [day] {};
\node at (6,-12) [day] {};
\node at (6,-13) [day] {};
\node at (6,-14) [weekendday] {};
\node at (6,-15) [weekendday] {};
\node at (6,-16) [day] {};
\node at (6,-17) [day] {};
\node at (6,-18) [day] {};
\node at (6,-19) [day] {};
\node at (6,-20) [day] {};
\node at (6,-21) [weekendday] {};
\node at (6,-22) [weekendday] {};
\node at (6,-23) [day] {};
\node at (6,-24) [day] {};
\node at (6,-25) [day] {};
\node at (6,-26) [day] {};
\node at (6,-27) [day] {};
\node at (6,-28) [weekendday] {};
\node at (6,-29) [weekendday] {};
\node at (6,-30) [day] {};
\node at (6,-31) [day] {};
 
\node at (7,-1) [day] {};
\node at (7,-2) [day] {};
\node at (7,-3) [day] {};
\node at (7,-4) [weekendday] {};
\node at (7,-5) [weekendday] {};
\node at (7,-6) [day] {};
\node at (7,-7) [day] {};
\node at (7,-8) [day] {};
\node at (7,-9) [day] {};
\node at (7,-10) [day] {};
\node at (7,-11) [weekendday] {};
\node at (7,-12) [weekendday] {};
\node at (7,-13) [day] {};
\node at (7,-14) [day] {};
\node at (7,-15) [day] {};
\node at (7,-16) [day] {};
\node at (7,-17) [day] {};
\node at (7,-18) [weekendday] {};
\node at (7,-19) [weekendday] {};
\node at (7,-20) [day] {};
\node at (7,-21) [day] {};
\node at (7,-22) [day] {};
\node at (7,-23) [day] {};
\node at (7,-24) [day] {};
\node at (7,-25) [weekendday] {};
\node at (7,-26) [weekendday] {};
\node at (7,-27) [day] {};
\node at (7,-28) [day] {};
\node at (7,-29) [day] {};
\node at (7,-30) [day] {};
 
 
\node at (8,-1) [day] {};
\node at (8,-2) [weekendday] {};
\node at (8,-3) [weekendday] {};
\node at (8,-4) [day] {};
\node at (8,-5) [day] {};
\node at (8,-6) [day] {};
\node at (8,-7) [day] {};
\node at (8,-8) [day] {};
\node at (8,-9) [weekendday] {};
\node at (8,-10) [weekendday] {};
\node at (8,-11) [day] {};
\node at (8,-12) [day] {};
\node at (8,-13) [day] {};
\node at (8,-14) [day] {};
\node at (8,-15) [day] {};
\node at (8,-16) [weekendday] {};
\node at (8,-17) [weekendday] {};
\node at (8,-18) [day] {};
\node at (8,-19) [day] {};
\node at (8,-20) [day] {};
\node at (8,-21) [day] {};
\node at (8,-22) [day] {};
\node at (8,-23) [weekendday] {};
\node at (8,-24) [weekendday] {};
\node at (8,-25) [day] {};
\node at (8,-26) [day] {};
\node at (8,-27) [day] {};
\node at (8,-28) [day] {};
\node at (8,-29) [day] {};
\node at (8,-30) [weekendday] {};
\node at (8,-31) [weekendday] {};
 
 
\node at (9,-1) [day] {};
\node at (9,-2) [day] {};
\node at (9,-3) [day] {};
\node at (9,-4) [day] {};
\node at (9,-5) [day] {};
\node at (9,-6) [weekendday] {};
\node at (9,-7) [weekendday] {};
\node at (9,-8) [day] {};
\node at (9,-9) [day] {};
\node at (9,-10) [day] {};
\node at (9,-11) [day] {};
\node at (9,-12) [day] {};
\node at (9,-13) [weekendday] {};
\node at (9,-14) [weekendday] {};
\node at (9,-15) [day] {};
\node at (9,-16) [day] {};
\node at (9,-17) [day] {};
\node at (9,-18) [day] {};
\node at (9,-19) [day] {};
\node at (9,-20) [weekendday] {};
\node at (9,-21) [weekendday] {};
\node at (9,-22) [day] {};
\node at (9,-23) [day] {};
\node at (9,-24) [day] {};
\node at (9,-25) [day] {};
\node at (9,-26) [day] {};
\node at (9,-27) [weekendday] {};
\node at (9,-28) [weekendday] {};
\node at (9,-29) [day] {};
\node at (9,-30) [day] {};
\node at (9,-31) [day] {};
 
\node at (10,-1) [day] {};
\node at (10,-2) [day] {};
\node at (10,-3) [weekendday] {};
\node at (10,-4) [weekendday] {};
\node at (10,-5) [day] {};
\node at (10,-6) [day] {};
\node at (10,-7) [day] {};
\node at (10,-8) [day] {};
\node at (10,-9) [day] {};
\node at (10,-10) [weekendday] {};
\node at (10,-11) [weekendday] {};
\node at (10,-12) [day] {};
\node at (10,-13) [day] {};
\node at (10,-14) [day] {};
\node at (10,-15) [day] {};
\node at (10,-16) [day] {};
\node at (10,-17) [weekendday] {};
\node at (10,-18) [weekendday] {};
\node at (10,-19) [day] {};
\node at (10,-20) [day] {};
\node at (10,-21) [day] {};
\node at (10,-22) [day] {};
\node at (10,-23) [day] {};
\node at (10,-24) [weekendday] {};
\node at (10,-25) [weekendday] {};
\node at (10,-26) [day] {};
\node at (10,-27) [day] {};
\node at (10,-28) [day] {};
\node at (10,-29) [day] {};
\node at (10,-30) [day] {};
 
 
\node at (11,-1) [weekendday] {};
\node at (11,-2) [weekendday] {};
\node at (11,-3) [day] {};
\node at (11,-4) [day] {};
\node at (11,-5) [day] {};
\node at (11,-6) [day] {};
\node at (11,-7) [day] {};
\node at (11,-8) [weekendday] {};
\node at (11,-9) [weekendday] {};
\node at (11,-10) [day] {};
\node at (11,-11) [day] {};
\node at (11,-12) [day] {};
\node at (11,-13) [day] {};
\node at (11,-14) [day] {};
\node at (11,-15) [weekendday] {};
\node at (11,-16) [weekendday] {};
\node at (11,-17) [day] {};
\node at (11,-18) [day] {};
\node at (11,-19) [day] {};
\node at (11,-20) [day] {};
\node at (11,-21) [day] {};
\node at (11,-22) [weekendday] {};
\node at (11,-23) [weekendday] {};
\node at (11,-24) [day] {};
\node at (11,-25) [day] {};
\node at (11,-26) [day] {};
\node at (11,-27) [day] {};
\node at (11,-28) [day] {};
\node at (11,-29) [weekendday] {};
\node at (11,-30) [weekendday] {};
\node at (11,-31) [day] {};
 
\end{tikzpicture}
\end{center}
 
\end{document}

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Beispiel für Diagramme mit TikZ

Hier ein Beispiel für Diagramme mit TikZ:

\documentclass[12pt,ngerman]{scrartcl}
 
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
 
\usepackage{tikz}
 
\begin{document}
 
\begin{tikzpicture}
[
    mybox/.style={rectangle,rounded corners,xshift=1cm,yshift=1cm,minimum width=20mm, minimum height=5mm},
    lang/.style={mybox,black,align=center,draw=black,fill=yellow,very thick,font=\bfseries},
]
 
\node at (5,-1) {\bfseries\large imperativ/prozedural};
\node at (13,-1) {\bfseries\large objektorientiert};
 
\node at (1,12) {\textbf{1950}};
\node at (1,10) {\textbf{1960}};
\node at (1,8) {\textbf{1970}};
\node at (1,6) {\textbf{1980}};
\node at (1,4) {\textbf{1990}};
\node at (1,2) {\textbf{2000}};
\node at (1,0) {\textbf{2010}};
 
\draw (2,0) -- (15,0);
\draw (2,2) -- (15,2);
\draw (2,4) -- (15,4);
\draw (2,6) -- (15,6);
\draw (2,8) -- (15,8);
\draw (2,10) -- (15,10);
\draw (2,12) -- (15,12);
 
\node at (10,2.5) [lang] {Python};
\node at (4,10.5) [lang] {Fortran};
\end{tikzpicture}
 
\end{document}

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

TikZ-Pixelart mit dem pixelart Package

Hier ein Beispiel aus der Dokumentation des pixelart Pakets von Louis Paternault

\documentclass[12pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{pixelart}
 
\begin{document}
 
I
\bwpixelart[color=red, scale=.05, raise=-0.3ex]{%
001101100
011111110
111111111
111111111
111111111
011111110
001111100
000111000
000010000
}
\LaTeX
 
\end{document}

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

PDFs anonymisieren mit dem pdfprivacy Paket

pdflatex packt einiges an Meta-Daten in eine PDF-Datei:

Mit dem pdfprivacy (http://mirror.ctan.org/macros/latex/contrib/pdfprivacy) Paket von Laurens Sion lassen sich diese Informationen unterdrücken.

Aus der Dokumentation:

„Creating pdfs with pdfLATEX populates several pdf meta-data fields such as date/time of creation/modification, information about the latex instal-
lation (e.g., pdfTEX version), and the relative paths of included pdfs. The pdfprivacy package provides support for emptying several of these pdf meta-
data fields as well as suppressing some pdfTEX meta-data entries in the resulting pdf.“

Die Optionen stehen dabei für:

nodocdata
Specify whether document meta-data should be removed from the PDF. Document meta-data includes: (i) Title, (ii) Subject, (iii) Author, and (iv) Keywords.
noproducerdata
Specify whether meta-data on the PDF-producing application should be removed. This includes: (i) Creator, and (ii) Producer.
noeditdata
Specify whether meta-data on the edit and creation dates should be removed. This includes: (i) creation date, and (ii) modification date.
noptexdata
Specify whether the PTEX meta-data entries should be suppressed. This includes: (i) PTEX.Fullbanner, (ii) PTEX.FileName, (iii) PTEX.PageNumber, and (iv) PTEX.InfoDict.
nopdftrailerid
Specify whether the pdfrailerid should be omitted.

Diese letzte Option zur pdftrailerid sagt mir nichts, die anderen Optionen sind sicherlich selbsterklärend. Hier ein Beispiel:

\documentclass[12pt,ngerman]{scrartcl}
 
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{babel}
\usepackage{graphicx}
\usepackage{csquotes}
\usepackage{paralist}
\usepackage{xcolor}
 
\usepackage[nodocdata=false,noeditdata=true,noproducerdata=true,noptexdata=true,nopdftrailerid=false]{pdfprivacy}
 
\begin{document}
 
Hallo Welt!
 
\end{document}

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Referenzen, Varioref und Prettyref

Hier ein Beispiel, wie man mit varioref und prettyref Referenzen in LaTeX aufpeppen kann:

\documentclass[ngerman]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{xcolor}
 
% sinnloser Text 
\usepackage{blindtext}
 
\usepackage{varioref}
\usepackage{prettyref}
 
% for prettyref
\newrefformat{eq}{\textup{(\ref{#1})}}
\newrefformat{cha}{Kapitel \ref{#1}}
\newrefformat{sec}{Abschnitt \ref{#1}}
\newrefformat{tab}{Tabelle \ref{#1} auf Seite \pageref{#1}}
\newrefformat{fig}{Abbildung \ref{#1} auf Seite \pageref{#1}}
 
\usepackage{showlabels}
 
\begin{document}
 
\section{Erster Abschnitt}\label{sec:erst}
 
\blindtext[3]
 
\begin{figure}[h]%
\rule{\columnwidth}{5cm}
\caption{Hallo Welt!}%
\label{fig:test1}%
\end{figure}
 
\blindtext[1]
 
\section{Zweiter Abschnitt}
 
\blindtext[5]
 
\begin{figure}%
\rule{\columnwidth}{5cm}
\caption{Hallo Welt!}%
\label{fig:test2}%
\end{figure}
 
\blindtext[4]
 
\begin{itemize}
	\item Ohne Paket: Siehe Abbildung \textcolor{red}{\ref{fig:test1}} auf Seite \textcolor{red}{\pageref{fig:test1}}
	\item Varioref: Siehe Abbildung \textcolor{red}{\vref{fig:test1}}
	\item Varioref: Siehe die Abbildung \textcolor{red}{\vpageref{fig:test1}}
	\item Ohne Paket: Siehe Abbildung \textcolor{red}{\ref{fig:test2}} auf Seite \textcolor{red}{\pageref{fig:test2}}
	\item Varioref: Siehe Abbildung \textcolor{red}{\vpageref{fig:test2}}
	\item Varioref: Siehe Abbildung \textcolor{red}{\vref{fig:test2}}
	\item Varioref: Siehe Abbildungen \textcolor{red}{\vrefrange{fig:test1}{fig:test2}}
	\item Varioref: Siehe die Abbildungen \textcolor{red}{\vpagerefrange{fig:test1}{fig:test2}}
	\item Prettyref: \textcolor{red}{\prettyref{fig:test1}}
	\item Prettyref: \textcolor{red}{\prettyref{sec:erst}}
	\item Varioref: Siehe Abbildung \textcolor{red}{\vref{fig:test3}}
	\item Varioref: Siehe Abbildung \textcolor{red}{\vref{fig:test4}}
\end{itemize}
 
\clearpage 
 
\begin{figure}%
\rule{\columnwidth}{5cm}
\caption{Hallo Welt!}%
\label{fig:test3}%
\end{figure}
 
\clearpage 
 
\begin{figure}%
\rule{\columnwidth}{5cm}
\caption{Hallo Welt!}%
\label{fig:test4}%
\end{figure}
 
\end{document}

Hier die Ausgabe der Referenzen auf der letzten Seite. Alles, was in rot gesetzt wird, wird so über das entsprechende TeX gesteuert.

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Creating sparklines with LaTeX

Sparklines, invented by Edward Tufte (check out his awesome books!), are an interesting way of visualizing information inside the text. For more information on the theoretical background check Prof. Tufte’s page https://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0001OR.

For LaTeX users there are a few ways of using them inside LaTeX which we will briefly introduce in this article.

1. Using the sparklines package.

Examples taken from the package documentation.

\documentclass[12pt]{article}
 
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{sparklines}
 
\begin{document}
 
Hello, I am a 
\begin{sparkline}{10}
\sparkrectangle 0.0 1.1
\sparkdot 0.25 0.62 blue
\sparkdot 1 0.2 red
\spark 0.1 0.95  0.2 0.8  0.3 0.3  0.4 0.52  0.5 0.62
0.6 0.7   0.7 0.5  0.8 0.4  0.9 0.25  1 0.2 /
\end{sparkline}
sparkline in a document.
 
You can also 
\begin{sparkline}{5}
\sparkspike .083 .18
\sparkspike .25 .55
\sparkspike .417 1
\sparkspike .583 .62
\sparkspike .75 .42
\sparkspike .917 .5
\end{sparkline}
use sparkbars.
 
Both types can
\begin{sparkline}{5}
\sparkspike .083 .18
\sparkspike .25 .55
\sparkspike .417 1
\sparkspike .583 .62
\sparkspike .75 .42
\sparkspike .917 .5
\spark 0.1 0.95  0.2 0.8  0.3 0.3  0.4 0.52  0.5 0.62
0.6 0.7   0.7 0.5  0.8 0.4  0.9 0.25  1 0.2 /
\sparkdot 1 0.2 blue
\end{sparkline} also be combined.
 
\end{document}

2. Using the AfterTheFlood OTF font with the spark-OTF package by Herbert Voß

A few days ago I found information about a sparklines OTF font on Twitter which I then shared with the German TeX community. Herbert Voß created a few commands to use these fonts inside documents and packaged them.

When you update your TeX Live 2017 you should automatically get this package. In addition you need to install the fonts from After the Flood which are available from github.

Remark: as of 2017-09-24 the spark-otf package seems to have issues when compiled with xeLaTeX (at least with Windows). Use luaLaTeX to compile this. Update: With version 0.04 of the package xelatex is working fine.

\documentclass[12pt]{article}
 
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{sparklines}
 
\begin{document}
 
Hello, I am a 
\begin{sparkline}{10}
\sparkrectangle 0.0 1.1
\sparkdot 0.25 0.62 blue
\sparkdot 1 0.2 red
\spark 0.1 0.95  0.2 0.8  0.3 0.3  0.4 0.52  0.5 0.62
0.6 0.7   0.7 0.5  0.8 0.4  0.9 0.25  1 0.2 /
\end{sparkline}
sparkline in a document.
 
You can also 
\begin{sparkline}{5}
\sparkspike .083 .18
\sparkspike .25 .55
\sparkspike .417 1
\sparkspike .583 .62
\sparkspike .75 .42
\sparkspike .917 .5
\end{sparkline}
use sparkbars.
 
 
Both types can
\begin{sparkline}{5}
\sparkspike .083 .18
\sparkspike .25 .55
\sparkspike .417 1
\sparkspike .583 .62
\sparkspike .75 .42
\sparkspike .917 .5
\spark 0.1 0.95  0.2 0.8  0.3 0.3  0.4 0.52  0.5 0.62
0.6 0.7   0.7 0.5  0.8 0.4  0.9 0.25  1 0.2 /
\sparkdot 1 0.2 blue
\end{sparkline} also be combined.
 
\end{document}

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Presentation on „LaTeX and EPUB“

This entry is part 3 of 3 in the series LWARP

Last weekend I gave a presentation (in German) on „LaTeX and EPUB“ on the Dante Autumn Conference in Mönchengladbach. You can find the slides and examples in my github repository: https://github.com/UweZiegenhagen/TalksAndArticles/tree/master/2017-Dante-Herbst-LaTeX-ePub.

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Mit LaTeX HTML und EPUB erzeugen: EPUB-Erstellung

This entry is part 2 of 3 in the series LWARP

In Teil 2 dieser Artikelreihe schauen wir uns das Musterdokument mal etwas an:

  • Genutzt wird hier die book-Klasse. Ich habe es schon mit den „deutschen“ Klassen wie scrartcl probiert, aber Fehlermeldungen erhalten
  • Als nächstes kommt die Unterscheidung für pdflatex und xelatex/lualatex
  • gefolgt vom Laden des lwarp-Pakets mit diversen Einstellungen
  • makeidx, hyperref und xcolor sind auch bekannte Pakete
% Save this as tutorial.tex for the lwarp package tutorial.
\documentclass{book}
\usepackage{iftex}
% --- LOAD FONT SELECTION AND ENCODING BEFORE LOADING LWARP ---
\ifPDFTeX
\usepackage{lmodern} % pdflatex
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\else
\usepackage{fontspec} % XeLaTeX or LuaLaTeX
\fi
% --- LWARP IS LOADED NEXT ---
 
\usepackage[
% HomeHTMLFilename=index, % Filename of the homepage.
% HTMLFilename={node-}, % Filename prefix of other pages.
% IndexLanguage=english, % Language for xindy index, glossary.
% latexmk, % Use latexmk to compile.
% OSWindows, % Force Windows. (Usually automatic.)
% mathjax, % Use MathJax to display math.
]{lwarp}
% \boolfalse{FileSectionNames} % If false, numbers the files.
 
% --- OTHER PACKAGES ARE LOADED AFTER LWARP ---
\usepackage{makeidx} \makeindex
\usepackage{xcolor} % (Demonstration purposes only.)
\usepackage{hyperref,cleveref} % LOAD THESE LAST!
 
% --- LATEX AND HTML CUSTOMIZATION ---
\title{The Lwarp Tutorial}
\author{Some Author}
\setcounter{tocdepth}{2} % Include subsections in the \TOC.
\setcounter{secnumdepth}{2} % Number down to subsections.
\setcounter{FileDepth}{1} % Split \HTML\ files at sections
\booltrue{CombineHigherDepths} % Combine parts/chapters/sections
\setcounter{SideTOCDepth}{1} % Include subsections in the side\TOC
 
\HTMLAuthor{Some Author} % Sets the HTML meta author tag.
\HTMLLanguage{en-US} % Sets the HTML meta language.
\HTMLDescription{A description.}% Sets the HTML meta description.
\HTMLFirstPageTop{Name and \fbox{HOMEPAGE LOGO}}
\HTMLPageTop{\fbox{LOGO}}
\HTMLPageBottom{Contact Information and Copyright}
\CSSFilename{lwarp_sagebrush.css}
 
\begin{document}
\maketitle % Or titlepage/titlingpage environment.
% An article abstract would go here.
\tableofcontents % MUST BE BEFORE THE FIRST SECTION BREAK!
\listoffigures
\chapter{First chapter}
\section{A section}
This is some text which is indexed.\index{Some text.}
\subsection{A subsection}
See \cref{fig:withtext}.
\begin{figure}\begin{center}
\fbox{\textcolor{blue!50!green}{Text in a figure.}}
\caption{A figure with text\label{fig:withtext}}
\end{center}\end{figure}
\section{Some math}
Inline math: $r = r_0 + vt - \frac{1}{2}at^2$
followed by display math:
\begin{equation}
a^2 + b^2 = c^2
\end{equation}
\printindex
\end{document}

Dieses Beispiel „dampfen“ wir jetzt etwas zusammen, um etwas einfacheren Code für unser erstes Epub zu erhalten. Wir ändern die Klasse auf „article“ und fügen zusätzlich noch \booltrue{FormatEPUB} ein, um die Konvertierung ins EPub zu unterstützen (siehe Handbuch)

\documentclass{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{blindtext}
 
\usepackage{lwarp}
\booltrue{FormatEPUB} % !
 
\usepackage{hyperref,cleveref}
 
\title{The Lwarp Tutorial}
\author{Uwe Ziegenhagen}
 
\setcounter{FileDepth}{1} 
\booltrue{CombineHigherDepths}
\setcounter{SideTOCDepth}{1}
 
\HTMLAuthor{Uwe Ziegenhagen}
\HTMLLanguage{de-DE}
\HTMLDescription{Mein erstes LaTeX-Epub}
 
\begin{document}
\maketitle 
 
\tableofcontents
 
\section{Hallo}
 
\blindtext[20]
 
\section{Welt}
 
\blindtext[20]
 
 
\end{document}

Diese Datei übersetzen wir anschließend mit pdflatex und lwarpmk html. Erzeugt werden jetzt die Hauptdatei im HTML sowie die beiden HTML-Dateien für die Sections. Zeit, diese jetzt nach EPUB zu bringen.

Mittel der Wahl ist dabei die eierlegende Wollmilchsau der E-Books, calibre. Also installieren und starten, diese Software ist für alle gängigen Betriebssysteme verfügbar.

In Calibre müssen wir noch einige Einstellungen vornehmen, das lwarp-Handbuch gibt vor, welche:

  • Unter Einstellungen, Erweiterungen, Dateityp-Erweiterungen muss das HTML to ZIP Plugin aktiviert sein
  • Wir müssen Calibre noch mitteilen, welche HTML-Tags den Umbrüchen entsprechen. Dazu gehen wir zu Einstellungen, Allgemeine Optionen, Strukturerkennung und setzten „Kapitel erkennen“ auf //h:h4

Damit ist die Konfiguration abgeschlossen, wir können die HTML-Dateien jetzt umwandeln. Dazu die HTML-Datei zu Calibre hinzufügen und mit „Bücher konvertieren“ umwandeln. Calibre erzeugt dann nach wenigen Sekunden ein EPUB, das in unserer Ebook-Bibliothek liegt.

Hier wieder das ZIP mit allen Dateien und den Ausgabe-Dateien.

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website