gnuplot の epslatex ドライバを用いた、LaTeX への日本語や数式の入ったラベルのある図面の取り込み

gnuplot の epslatex ドライバが非常に便利なので、使い方に関してのメモです。

同ドライバは、gnuplot での出力が、文字の入っていない eps ファイルと、その eps ファイルの上に文字情報を追記するための TeX ファイルの2つに分かれることが大きな特徴です。
これにより、ありがちな gnuplot での日本語ラベルの問題などが発生しなくなります。
ラベルや凡例に数式を追加することも非常に容易です。

epslatex ドライバの概要

  • 出力が、文字の入っていない eps ファイルと、その eps ファイルの上に文字情報を追記するための TeX ファイルの2つ
  • ラベルや凡例に数式を入れること、日本語での記述に、特別な手間が無い
  • 特別にドライバをインストールする必要がない

epslatex ドライバの使用に当たっては、以下のように標準パッケージしか使っていません。

  • Linux標準のTeX Liveパッケージ
  • Linux標準のgnuplotパッケージ

使い方はいたってシンプルです。
以下が、gnuplot 用の plt ファイルです。
graph.tex と graph.eps が出力されます。

set terminal epslatex color
set output "graph.tex"

set xlabel "時間 $t$ [秒]"
set ylabel "電圧 $V$ [V]"

set grid

plot sin(x) title "$y = sin(t)$" w l

quit

次に、出力された eps ファイルと TeX ファイルを読み込むメインの TeX ファイルです。
拡張子をつけず、input とすることで両方のファイルの読み込みが行われます。

\documentclass[a4j,10pt]{jsarticle}

\usepackage[dvipdfmx]{graphicx}

\begin{document}
\begin{figure}[htb]
	\centering
	\input{graph}
	\caption{正弦波信号}
	\label{fig:graph}
\end{figure}

\end{document}

最後に、bash 等で以下のコマンドによるコンパイルを行うだけです。
(ラベルの都合上、TeX ファイルは2度コンパイルしています)

gnuplot plot.plt
platex main.tex
platex main.tex

以下が実際の図のイメージです。

epslatex-capture

plt ファイルに記述した数式がそのまま表示されています。
日本語のラベルですが、フォントの指定もすることなく表示されています。
また、読み込んでいるファイルは TeX ファイルなので、読み込みを行う TeX ファイルでのフォントサイズ指定を一括で行うこともできます。

\documentclass[a4j,10pt]{jsarticle}

\usepackage[dvipdfmx]{graphicx}

\begin{document}
\begin{figure}[htb]
	\centering
	{\scriptsize \input{graph}}
	\caption{正弦波信号}
	\label{fig:graph}
\end{figure}

\end{document}

さらに、プロットの際に、サイズ指定をすることで図のサイズを変更することもできます。
加えて、data.csv という別のデータファイルの読み込みを行っています。

set terminal epslatex color size 8.0cm,4.0cm
set output "graph.tex"

set xlabel "時間 $t$ [秒]"
set ylabel "電圧 $V$ [V]"

set grid

set datafile separator ","
plot "data.csv" title "$y = sin(t)$" w l

quit

以上のように、非常に簡単に、カラーで日本語もあり、数式を含んだような図面を LaTeX に取り込むことができます。

Gnuplotのバージョン : 4.2
TeX環境 : TeX Live 2014

画像をA4のPDFファイルに変換するPHPスクリプト

任意の画像をA4サイズのPDFに変換するPHPスクリプトのメモです。

ブラウザ上で、アップロードした画像をPDFに変換するスクリプトを作成する必要があり、その一部分をメモとして残します。
解像度は100dpiや150dpiを超える値は時間が非常にかかり、サーバにも負荷をかけるので注意が必要です。

以下では、’output.pdf’というPDFファイルに出力しています。

// ファイルの書き出し
$image->writeImage('output.pdf');

または、以下のようなコードで、作成したPDFファイルをそのまま表示することも可能です。

// ファイルの表示
header('Content-type: application/pdf');
echo $image;

以下が、コードの全体です。

<?php
// JPG画像のPDFへの変換

// 初期値の設定
$img  = 'lenna.jpg'; // 読み込む画像
$dpi  = 100;         // PDFの解像度 [dpi]
$w    = 210.0;       // PDFの横幅 [mm]
$h    = 297.0;       // PDFの縦幅 [mm]

// mm -> px
$pw  = intval($w/25.4*$dpi);
$ph  = intval($h/25.4*$dpi);

// 画像の読み込み
$image = new Imagick();
$image->setResolution($dpi, $dpi);
$image->setPage($pw, $ph, 0, 0);
$image->readImage($img);

// 画像の再サンプル
$image->resampleImage($pw, $ph, imagick::FILTER_UNDEFINED, 1);
$image->setImageFormat('pdf');

// ファイルの書き出し
$image->writeImage('output.pdf');

// ファイルの表示
/*
header('Content-type: application/pdf');
echo $image;
*/
?>

WordPressでLaTeX数式の記述 (WP QuickLaTeX)

WordPressの本文中に、LaTeXの数式を挿入したかったので導入したプラグインに関してのメモです。

今回導入したプラグインは「WP QuickLaTeX」。
導入時バージョン : 3.8.0

通常と同様、プラグインから検索で追加可能です。有効化をするだけですぐに、以下のような記述が変換されます。

[latex]と[/latex]で

\[
y=\sin(t)
\]

を囲むだけで、以下のように変換されます。

     \[ y=\sin(t) \]

数式番号も対応されており、

\begin{equation}
y=\cos(t) \label{eq:test}
\end{equation}

は、文中で式(\ref{eq:test})とすれば、式(1)のように番号が振られます。

(1)    \begin{equation*} y=\cos(t)  \end{equation*}

ただし、eqnarrayの数式の式番号は1つになってしまうようです(バグ?)。

\begin{eqnarray}
F(\omega) &=& \int_{-\infty}^\infty f(t)e^{-j\omega t} dt \label{eq:eq1} \\
f(t) &=& \frac{1}{2\pi} \int_{-\infty}^\infty F(\omega)e^{j\omega t} d\omega \label{eq:eq2}
\end{eqnarray}

(2)    \begin{eqnarray*} F(\omega) &=& \int_{-\infty}^\infty f(t)e^{-j\omega t} dt  \\ f(t) &=& \frac{1}{2\pi} \int_{-\infty}^\infty F(\omega)e^{j\omega t} d\omega \label{eq:eq2} \end{eqnarray*}

その他、有名なプラグインとして「LaTeX for WordPress」があります。[latex]と[/latex]が無くても変換されるというメリットがある反面、以下のような点がデメリットだと思います。
(バージョン 3.4.10 時点では簡易的なエスケープ記法は見当たりませんでした)

  • SyntaxHighlighter Evolved などと一部競合
  • 正規表現など、一般的な記述も LaTeX 文書として置換されてしまう

なので、総合して「WP QuickLaTeX」を使うことにしました。

レンタルサーバーにownCloud環境の構築

AjaXplorerがPydioとなりましたが、オンラインストレージとしてはいまいち使いづらい印象だったので、ownCloud環境を新たに整備しました。ownCloudは、使いやすく、でも高機能なオンラインストレージサービスです。

ownCloudのバージョン:v6.02
データベース:SQLite
PHPのバージョン:5.4.12

インストール方法は、一般的なWebインストーラを使う方法ではなく、圧縮ファイルの解凍で行いました。
まずはダウンロードページへ。

SSHが使える環境であれば、.tar.gz2ファイルをレンタルサーバ上でwgetコマンドなどで、そうでなければ.zipをローカルにダウンロードします。(どちらでも検証しています)
次に、.tar.gz2ファイルならサーバ上で解凍。.zipなら解凍し、作成されたowncloudディレクトリを丸ごとアップロードします。ちなみに、私はこの時点でディレクトリ名を変更しています。
そうすると、以下のような初期アカウント作成画面が表示されます。

owncloud_capture_2

ここで、データベース設定はSQLiteにします。

owncloud_capture_3

以上の手順だけで、インストールが完了します。

owncloud_capture_4

容量ほぼ無制限のオンラインストレージの出来上がりです。
一番便利だと感じていたのは、共有URLの公開に関して。
各アイテムについて「Share -> Share Link」で外部のユーザーに公開できる点です。

index.phpには認証やIP制限をかけるのもありだと思います。

MatlabでLPF

備忘録です。
Matlabでローパスフィルタを簡易的に作成してみました。

    処理手順(おそらく)

  1. LPFの変数指定
  2. FIRフィルタの係数計算
  3. フィルタ係数と入力信号から、通過信号算出

fdesign関数のパラメータをいじれば、いろいろなフィルタが簡易的にすぐに設計できそうです。
帯域を狭帯域にしすぎたり、阻止帯域での減衰が大きすぎると係数が増加し、処理時間も増加します。

function y = lpf_filtered_signal(x,Fs)
    % LPF 処理信号算出関数
    %
    % 変数
    %   Fs  : サンプリング周波数
    %   Fp  : 通過帯域周波数
    %   Fst : 阻止帯域周波数
    %   Ap  : 通過帯域のリップル [dB]
    %   Ast : 阻止帯域の減衰量 [dB]
    
    % 変数の設定
    Fp  = 10*1e6;
    Fst = 20*1e6;
    Ap  = 1;
    Ast = 50;
    h = fdesign.lowpass('Fp,Fst,Ap,Ast',Fp,Fst,Ap,Ast,Fs);
    
    % フィルタの設計
    H = design(h);
    
    % フィルタ通過信号
    y = filter(H.Numerator,1,x);
end
    参考にしたサイト
  • 実践に即したデジタル フィルターの紹介 – MATLAB & Simulink – MathWorks 日本
  • フィルターの実装と解析 – MATLAB & Simulink – MathWorks 日本
  • ローパス FIR フィルターの設計 – MATLAB & Simulink Example – MathWorks 日本
  • WordPress、初期導入

    WordPress、初期導入にはいろいろなサイトを参考にしたわけですが、次のサイトを結構参考にしました。

    WordPressのセキュリティを徹底強化 | CSSPRO

    2011年の記事なので少し古いです。紹介されているプラグインのうち、更新されていないいくつかのプラグインは使用しませんでした。

    あとは、
    find . -type d -print | xargs chmod 600
    find . -name “*.php” -print | xargs chmod 705
    とかのコマンドを使ってパーミッションを調整したり。