2016-06-26

Beamer, tło i (pół)przeźroczystość

Swego czasu (jakieś dwa lata temu) bawiłem się tłami i półprzeźroczystością w prezentacjach beamera. Publikuję, bo może komuś się przyda.


TeX-a i PDF-a można pobrać stąd

2016-05-24

LaTeX -> EPS, PNG, SVG

Czasami zachodzi potrzeba wyeksportowania pewnych elementów stworzonych w LaTeX-u (np. formuł matematycznych lub grafik wykonanych za pomocą pakietu tikz) do formatów graficznych takich jak EPS, PNG, SVG. Po co? Najczęściej po to, aby umieścić je na stronie WWW (chociaż do umieszczania formuł matematycznych na stroniach WWW polecam MathJAX) lub zaimportować do innego programu. Poniżej zamieszczam opis sposobu jak wychodząc z jednego pliku TeX otrzymać wiele plików EPS, PNG, SVG.

Krok 1 – przygotowanie pliku LaTeX-owego – nazwijmy go roboczo plik.tex. Ważnym jest aby każdy element, który ma w wyniku dać plik graficzny, znajdował się na oddzielnej stroni PDF-a powstałego po kompilacji. Jeśli w pliku TeX znajdują się tylko elementy do przetworzenia, możemy w kodzie oddzielić je po prostu za pomocą \newpage; na przykład:

\documentclass[12pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}

\pagestyle{empty}

\begin{document}

$$a^2 = b^2 + c^2$$

\newpage

$$E = m c^2$$

\newpage

\begin{tikzpicture}
\draw[->] (0,0) -- (1,1);
\end{tikzpicture}

\end{document}

Możemy też użyć pakietu preview, który, gdy aktywny (parametr active), z wyjsciowego PDF-a wycina nam wszystko z wyjątkiem zdefiniowanych środowisk – w poniższym przykładzie są to eksponowane środowiska matematyczne (czyli $$…$$, displaymath, equation; użyty parametr displaymath) oraz środowisko tikzpicture (użyte polecenie \PreviewEnvironment{tikzpicture}).

\documentclass[12pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage[active,displaymath]{preview}
\PreviewEnvironment{tikzpicture}

\begin{document}

To jest ważny wzór
$$a^2 = b^2 + c^2$$
Ten wzór też jest ważny
$$E = m c^2$$
ale ten $x^2=1$ już nie.

A to taki tam obrazek

\begin{tikzpicture}
\draw[->] (0,0) -- (1,1);
\end{tikzpicture}

\end{document}

Plik plik.tex kompilujemy do pliku plik.pdf, który będzie bazą dla następnych operacji.

Krok 2 – skrypt bash – nazwijmy go roboczo skrypt.sh.

#!/bin/bash

pdfcrop $1
mv `basename $1 .pdf`-crop.pdf $1
pdftk $1 burst
rm doc_data.txt

for i in pg_*.pdf
do
j=`basename $i .pdf`
pdftops -eps $i $j.eps
convert -density 150 -background transparent $i $j.png
pdf2svg $i $j.svg
rm $i
done

Skrypt uruchamiamy podając jako parametr nazwę utworzonego wcześniej pliku PDF:

./skrypt.sh plik.pdf

Co robi powyższy skrypt? Objaśnienie linia po linii:
  • pdfcrop $1 — przycina ładnie każdą stronę pliku plik.pdf (aby usunąć nadmiarowe marginesy wokół np. równań) i zapisuje wynik do pliku plik-crop.pdf
  • mv `basename $1 .pdf`-crop.pdf $1 — zmienia nazwę pliku plik-crop.pdf na plik.pdf
  • pdftk $1 burst — dzieli plik plik.pdf na pliki zawierające po jednej stronie; powstają wtedy pliki pg_0001.pdf, pg_0002.pdf, itd.
  • rm doc_data.txt — ponieważ pdftk tworzy nam niepotrzebny plik doc_data.txt — usuwamy go
  • for i in pg_*.pdf — tu mamy początek pętli po wszystkich plikach pg_0001.pdf, pg_0002.pdf, itd.
  • j=`basename $i .pdf` — wyodrębniamy rdzeń nazwy bez rozszerzenia, który będzie potrzebny przy nazywaniu następnych plików
  • pdftops -eps $i $j.eps — konwertujemy pliki pg_0001.pdf, pg_0002.pdf, itd. do plików pg_0001.eps, pg_0002.eps, itd. (uwaga! zamiast pdftops można też użyć ghostscripta jak kto woli)
  • convert -density 150 -background transparent $i $j.png — konwertujemy pliki pg_0001.pdf, pg_0002.pdf, itd. do plików pg_0001.png, pg_0002.png, itd. (parametry konwersji: przezroczyste tło i dpi=150)
  • pdf2svg $i $j.svg — konwertujemy pliki pg_0001.pdf, pg_0002.pdf, itd. do plików pg_0001.svg, pg_0002.svg, itd.
  • rm $i — usuwamy niepotrzebne już teraz pliki pg_0001.pdf, pg_0002.pdf, itd.

That's all folks!

2015-03-08

Programy DTP - oś czasu

Oto oś czasu prezentująca rozwój najpopularniejszych programów DTP. Uwagi są mile widziane.

(jak zwykle – kliknij na grafice aby powiększyć ją do zadowalających/czytelniejszych rozmiarów)

2014-12-14

Polska klawiatura programisty w Linuksie - nie tylko alfabet

Najczęściej używanym przez polskiego użytkownika Linuksa układem klawiatury jest tzw. polska klawiatura programisty. Wszyscy wiedzą, że aby uzyskać wielką literę albo wykrzyknik należy użyć klawisza Shift, zaś aby uzyskać litery z polskimi znakami diakrytycznymi – należy użyć prawego klawisza Alt. Nie wszyscy jednak wiedzą, ze z tego układu klawiatury można wycisnąć nieco więcej. Na poniższym rysunku (kliknij aby go powiększyć) przedstawiłem znaki które można otrzymać przyciskając dany klawisz oraz:
  • żadnego modyfikatora (lewy górny róg „kratki”)
  • klawisz Shift (prawy górny róg)
  • prawy klawisz Alt (lewy dolny róg)
  • jednocześnie klawisze Shift i Alt (prawy dolny róg)


Dzięki znajomości odpowiednich skrótów można w dość prosty sposób umieścić w tekście np. zarówno poprawny polski cudzysłów („Ala ma kota”), jak i jego niemiecką („Ala hat eine Katze“) czy francuską (« Ala a un chat ») wersję.

2014-10-23

Compression of plain text files - 7z vs zip vs rar

This blog post is a translation of original post in Polish – for my friends who do not speak Polish :-)

Quantum-mechanical calculation codes create output in the form of plain text files. Sometimes the files are very large - a several / a few dozen MB of plain text. Some time ago I decided to clean out some directories containing calculation outputs in large text files (to save some disk space) and compress them. By the way I checked which one of the three common compression formats – zip, rar, or 7z – has better compression level for text files.

Size without compression (MB)Zip archive (MB)7z archive (MB)Rar archive (MB)
Directory 1 (only text files)193,738,82,43,5
Directory 2 (only text files)633,7128,65,98,5
Directory 3 (text and binary files)699,6153,399,7144,4

The results are very interesting, because for plain text files (of high redundancy) the 7z compression allows you to create an archive of size up to 100 times smaller than uncompressed files (and up to several times smaller than a zip/rar archive).

2014-07-23

Tworzenie wykresów naukowych w LaTeX-u za pomocą pgfplots, cz. 2

Trochę długo zbierałem się do napisania drugiego odcinka serii, ale w końcu powstał ;-)

Tym razem mam do pokazania dwa przykłady wykresów stworzonych za pomocą pgfplots. Na ich przykładzie chciałbym pokazać, jak za pomocą pgfplots wczytywać serie danych z pliku.

Przykład pierwszy:

2014-06-23

Wyrażenia matematyczne na stronach WWW - MathJAX


Biblioteka javascriptowa MathJAX umożliwia w łatwy sposób zamieszczanie wyrażeń matematycznych na stronach WWW, używając składni LaTeX-owej (możliwe jest także używanie składni MathML oraz ASCIIMathML, ale zostańmy przy LaTeX-u). MathJAX powstał w 2009 roku i jest rozwijany pod egidą Amerykańskiego Towarzystwa Matematycznego (American Mathematical Society, AMS - to ci od pakietu amsmath). Obecnie jest używany na wielu stronach WWW, m.in. na Wikipedii, arXiv, czy stronie Physical Review.

MathJAX ma tą przewagę nad standardem MathML że:
  • działa na większej ilości przeglądarek,
  • posługuje się prostą składnią LaTeX-ową a nie lasem znaczników jak MathML - przykład: odpowiednikiem LaTeX-owego $E=mc^2$ w MathML jest <math><mi>E</mi><mo>=</mo><mi>m</mi><msup><mi>c</mi><mn>2</mn></msup></math> (skonwertowane za pomocą edytora WIRIS)

Aby zacząć zabawę/pracę z MathJAX należy wpierw umieścić w kodzie HTML odnośnik do biblioteki:

<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>

Oczywiście można ściągnąć bibliotekę MathJax.js (licencja Apache) na swój serwer i odpowiednio zmodyfikować ścieżkę, ale w przypadku Bloggera ta opcja odpada.

Dalej jest prosto - para znaczników \( i \) umożliwia wstawianie formuł matematycznych umieszczanych w linii tekstowej, zaś pary znaczników $$...$$ lub \[...\] umożliwiają wstawianie formuł matematycznych eksponowanych.

Przykład - poniższy kod:

Hamiltonian dla układu <i>N</i>-elektronowego ma postać:
\[ \hat H = \sum_{i=1}^N \hat h(i) + \sum_{i>j=1}^N \hat V_{ij} \]
gdzie \( \hat h(i) \) jest hamiltonianem jednoelektronowym zaś \( \hat V_{ij} \) jest operatorem oddziaływania elektron-elektron.

Macierze Pauliego:
$$
\sigma_x=
\begin{pmatrix}
0 & 1 \\
1 & 0\\
\end{pmatrix}
\qquad
\sigma_y=
\begin{pmatrix}
0 & -i \\
i & 0\\
\end{pmatrix}
\qquad
\sigma_z=
\begin{pmatrix}
1 & 0 \\
0 & -1\\
\end{pmatrix}
$$

daje w wyniku

Hamiltonian dla układu N-elektronowego ma postać:
\[ \hat H = \sum_{i=1}^N \hat h(i) + \sum_{i>j=1}^N \hat V_{ij} \]
gdzie \( \hat h(i) \) jest hamiltonianem jednoelektronowym zaś \( \hat V_{ij} \) jest operatorem oddziaływania elektron-elektron.

Macierze Pauliego:
$$
\sigma_x=
\begin{pmatrix}
0 & 1 \\
1 & 0\\
\end{pmatrix}
\qquad
\sigma_y=
\begin{pmatrix}
0 & -i \\
i & 0\\
\end{pmatrix}
\qquad
\sigma_z=
\begin{pmatrix}
1 & 0 \\
0 & -1\\
\end{pmatrix}
$$


Strona domowa projektu: www.mathjax.org

2014-06-13

Tworzenie wykresów naukowych w LaTeX-u za pomocą pgfplots, cz. 1

Jak wiadomo LaTeX potrafi wiele rzeczy związanych ze składem tekstu. Pakiet pgf/tikz umożliwia łatwe i eleganckie tworzenie różnorakich diagramów, rysunków i wykresów w kodzie LaTeXa. Powstał nawet pakiet pgfplots, będący rozszerzeniem pgf/tikz specjalnie poświęconym generowaniu wykresów. I ten właśnie pakiet chciałbym omówić.

Oczywiście chociaż pobieżne omówienie podstawowych funkcji pakietu pgfplots przerasta możliwości tego posta (a raczej serii postów, gdyż, jak można wywnioskować z tytułu, planuję ich więcej niż jeden) - w końcu oficjalny manual liczy sobie ponad 300 stron. Dlatego też postanowiłem stworzyć kilka przykładowych, "życiowych", wykresów i omówić pokrótce ich kod, tak aby każdy mógł dostosować go do swoich potrzeb.

Na pierwszy ogień idzie chemia :-)

Oto wykres (użyłem danych z Wikipedii)...


...a oto kod:


\begin{tikzpicture}[scale=1.5]
\begin{axis}[
title={Zależność rozpuszczalności NaCl oraz CuSO$_4\cdot$5H$_2$O od temperatury},
title style={text width=16em},
xlabel={Temperatura [\textcelsius]},
ylabel={Rozpuszczalność [g/100~g wody]},
xmin=0,xmax=100,
ymin=0,ymax=120,
legend pos=north west,
ymajorgrids=true,grid style=dashed
]

\addplot[color=red,mark=*]
coordinates {
(0,35.65)
(10,35.72)
(20,35.89)
(30,36.09)
(40,36.37)
(50,36.69)
(60,37.04)
(70,37.46)
(80,37.93)
(90,38.47)
(100,38.99)
};

\addplot[color=blue,mark=square]
coordinates {
(0,23.1)
(10,27.5)
(20,32)
(30,37.8)
(40,44.6)
(60,61.8)
(80,83.8)
(100,114)
};

\legend{NaCl,CuSO$_4\cdot$5H$_2$O}
\end{axis}
\end{tikzpicture}


2014-03-29

3 ciekawe aplikacje, cz. 3

dwb

jest przeglądarką internetową opartą na połączeniu Webkita, Gtk, skrajnego minimalizmu i skrótów klawiaturowych w stylu Vima. Podobnie zresztą jak vimprobable, uzbl, jumanji, luakit, czy surf.


Chociaż dwb wydaje się na pierwszy rzut oka bardzo uproszczony, posiada on wiele funkcji cechujących nowoczesne przeglądarki, tj. zakładki, obsługę ciasteczek i proxy, adblocka, blokowanie flasha i javascriptu, rozszerzenia i skrypty użytkownika.

Gdyby ktoś nie wiedział jak wyjść z dwb, to podpowiem, że wystarczy wpisać :quit ;-)

QtWeb

jest przeglądarką internetową opartą na Webkicie i Qt, zaprojektowaną do bycia aplikacją przenośną.


Ciekawą funkcją QtWeb jest możliwość prostej deaktywacji w locie wczytywania obrazów, skryptów javascript lub flasha (niestety globalnie a nie dla każdej karty z osobna), czyli coś czego brakuje mi w Chrome a co było dobrze zrobione w Operze zanim zchromiała do reszty.

Meld

jest graficznym programem do porównywania zawartości plików tekstowych lub katalogów.


Meld posiada elegancki interfejs użytkownika oraz pozwala na zawijanie długich linii tekstu - co dla mnie jest osobiści ważniejsze, gdyż umożliwia mi to wygodniejsze porównywanie plików źródłowych LaTeX-a, i czego brakowało mi w programie Kompare.

2014-03-27

XeLaTeX, fonty i małe kapitaliki

XeLaTeX umożliwia nam korzystanie z fontów Open Type i True Type w dokumentach LaTeX-owych. Kapitaliki (ang. small caps, czyli "małe kapitaliki") natomiast są popularnym narzędziem typograficznym pozwalającym na wyróżnianie pojedynczych wyrazów lub krótkich wyrażeń (np. tytułów). Niestety większość fontów Open Type i True Type nie posiada w swoim kroju zaprojektowanych prawdziwych kapitalików, więc polecenie \textsc{jakiśtekst} zwróci po prostu zwykły tekst bez kapitalików.

Obejściem tego problemu jest zdefiniowanie dodatkowego fontu specjalnie na potrzeby tekstu z kapitalikami oraz przedefiniowanie polecenia \textsc, tak jak w poniższym kodzie.


\setmainfont{Lato}
\newfontfamily\capsfont{TeX Gyre Adventor}
\let\oldtextsc=\textsc
\renewcommand{\textsc}[1]{\oldtextsc{\capsfont#1}}


Poniżej przedstawiam dwa przykłady jak to wygląda: pierwszy przykład to font Lato dla zwykłego tekstu oraz TeX Gyre Adventor dla kapitalików, natomiast drugi przykład to Georgia dla zwykłego tekstu i Linux Libertine O dla kapitalików.