f

アーカイブ

2013-10-31

LyXでuplatexを使いギリシャ文字やアクセント付き文字をそのまま表示

従来のplatexでは、内部処理がShift JISやEUC-JPであったため半角カタカナやギリシャ文字といったUnicode文字列が正しく表示されない。全角で表示されたり文字が消えてしまう。

2007年ごろから内部処理をUnicode化したupLaTeXが登場した。upLaTeXを使うことでこの問題は解決できる。uplatexは実質的にplatexの上位互換であるためuplatexの利用が推奨される。uplatexはUnicode文字列をそのまま正しく表示できるため非常に便利である。具体的には次のような3ケースでuplatexの利点が発揮される。
  1. 国際単位系(SI)において、10 − 6を表すμという接頭辞をはじめとするギリシャ文字。
    platex: 入力されたμは全角で表示される。
    uplatex: μと入力したものがそのまま半角で正しく表示できる。
  2. 参考文献(bibファイル)中の著者名のウムラウト(二重点:ö)やアクセント記号のついた文字(â、ă)。
    platex: エラーが起きるため、逐一\”{o}というように該当箇所のLaTeXコマンドによる置き換えが必要。
    uplatex: 混入していても問題なし。
  3. 半角カタカナ。
    platex: 表示されない。
    uplatex: 表示可能
以上のように、uplatexを使うと日本語の文書作成で使える文字の幅が格段に広がり非常に便利である。ここではLyXにおいてuplatexを導入しこれらの文字を正しく表示する方法を説明する。

LyXの設定

  1. platexをuplatexに変更
    今までplatexとしていたところをuplatexに置き換える。
    Tools ▷ Preferences… ▷ File Handling ▷ Converters
    Converter Definitions: LaTeX (pLaTeX) -> DVI
    項目元々の値変更後
    Converterplatexuplatex
    Extra flaglatex=platexlatex=uplatex
    修正後Modify ▷ Save
  2. documentclassの変更
    uplatexを使うにあたってclassファイルで設定しているフォントのエンコーディングをJY1やJT1からJY2やJT2に変更する必要がある。通常は、JY2やJT2にしているdocumentclassを使用すればよい。jsarticleとjsbookについてはオプションを指定することで対応できる。以下ではjsarticleを使った例を示す。jreportに対応するクラスを使うには後述するレイアウトを追加して行う。
    Document ▷ Settings… ▷ Document Class
    Document class: Japanese Article (jsarticle)
    Class options
    • Custom: uplatex
  3. bibtexについて。upbibtexというものが一応あるが、uplatexを使っていれば通常通りpbibtexを使っていても問題なかった。

レイアウトの追加

uplatex対応のdocumentclassは標準のLyXではjsarticleとjsbookのみである。その他のujarticle、ujbook、ujreportなどを使うにはLyXに対応するレイアウトを追加する必要がある。その追加方法について説明する。
LyXの標準のレイアウトファイルの場所は以下にある。
c/Program Files/LyX 2.1/Resources/layouts
ここに以下のファイルがある。
jarticle.layout, jreport.layout, jbook.layout
tarticle.layout, treport.layout, tbook.layout
最初にtが付いているものは縦書用のclsファイルのためのものである。これらのファイルを参考にuplatexに使用するclassファイルを読み込む独自のレイアウトファイルを作成する。作成するといっても上記のひな形ファイルでclassファイルを宣言している箇所を変更するだけなので非常に簡単である。jreport.layoutをコピーしてから変更してujreport.layoutを作成する例を示す。
jreport.layoutの内容
#% Do not delete the line below; configure depends on this
# \DeclareLaTeXClass[jreport]{Japanese Report (jreport)}
# \DeclareCategory{Reports}
# Japanese report textclass definition file.
# Author : Koji Yokota (yokota@res.otaru-uc.ac.jp)
# This style provides japanese features
Format 48
Provides japanese 1
# Input general definitions
Input report.layout

ujreport.layoutの内容
#% Do not delete the line below; configure depends on this
# \DeclareLaTeXClass[ujreport]{Japanese Report (ujreport)}
# \DeclareCategory{Reports}
# Japanese report textclass definition file.
# This style provides japanese features
Format 48
Provides japanese 1
# Input general definitions
Input report.layout

2行目の”jreport”となっている箇所を”ujreport”に修正するだけである。なお、Format 48となっている箇所はLyX 2.0系統ではFormat 35となっている。
必要に応じて、同様に修正して以下のレイアウトファイルを作る。
ujarticle.layout, ujbook.layout, ujreport.layout
utarticle.layout, utbook.layout, utreport.layout
作成したlayoutファイルはもとのlayoutファイルがあった場所
c/Program Files/LyX 2.1/Resources/layouts
に保存しても良いが、オリジナルの配布物と分けるため以下のようにユーザー用の場所に保存した方がよいだろう。
C:\Users\Senoo\AppData\Roaming\LyX2.1\layouts

パッケージの読み込みとギリシャ文字やウムラウトの表示

実際にギリシャ文字やウムラウトといった文字を表示するために必要なLaTeXのパッケージなどの設定を説明する。
以下の内容をプリアンブルに記述。
\usepackage[utf8]{inputenc}
\usepackage[prefernoncjk]{pxcjkcat}
pxcjkcatは最近のものだと標準で存在している。以下のようにpxcjkcatを読み込む代わりに手動で\kcatcodeを設定しても良い。

\kcatcode‘ç=15% not cjk character
\kcatcode‘Ŕ=15
\kcatcode‘П=15
\kcatcode‘α=15
\kcatcode‘ἀ=15
\kcatcode‘“=15
こうすることでウムラウト(aouなどに二重点がついたもの)や各種アクセント記号(’、‘、v、^など)・ギリシャ文字が半角で表示される。この設定を行わないと全角で表示される。試しに以下の文字列を入力して表示させてみよう。
ÄäÖöÜü, μ, αβ, あアア
This document contains English, Română, 日本語
”’
LyXでない通常のLaTeXでやるのはもっと簡単で以下のように適切なclsファイルとパッケージを読み込んでuplatexで処理するだけである。

\documentclass[uplatex]{jsarticle}
\usepackage[utf8]{inputenc}
\usepackage[prefernoncjk]{pxcjkcat}
\begin{document}
ÄäÖöÜü, μ, αβ, あアア
This document contains English, Română, 日本語

\end{document}
参考

課題

\usepackage[prefernoncjk]{pxcjkcat}
上記のようにpxcjkcatパッケージを読むこむと、通常は問題ないのだが、文書中に°(U+00B0)や→(U+2190)、§といった文字があると以下のようなエラーが出る。
! TeX capacity exceeded, sorry [save size=80000]. 
texmf-dist/web2c/texmf.cnfのこのサイズを大きくしたり、該当するkcatcodeを設定しても解決できなかった。おそらくフォントがうまくインストールされていないからだと思われるが詳細は不明。今後調査を続ける。
ギリシャ文字やアクセント付き文字が全角になってしまうが、pxcjkcatパッケージやkcatcodeを設定しないことでこのエラーを回避する。半角カタカナなど今まで表示できなかった文字が表示できるようになっただけよしとしよう。

2013-10-15

lnコマンドでシンボリックリンクを相対パスで貼る

lnコマンドはシンボリックリンク貼るときに頻繁に使うコマンド。以下のフォーマットで使用する。
ln -s 参照先 リンク
絶対パスで貼るときは何も困らない。相対パスで貼るときはややこしくて、「リンクの位置」を基準にして相対的な参照先を指定する。
例を示す。
現在位置が/home/senoo/とする。
/home/senoo/temp/reference.datというファイルへのリンクを
/home/senoo/work/の場所に相対パスで貼り付ける。
コマンドを実行して相対パスでリンクを貼りたかったら、以下のようにする。
ln -sf ../temp/reference.dat work/
入力補完もきかないしなんだか気持ち悪いがこれが正しい。
以下ではないので注意。
ln -sf temp/reference.dat work/link.dat

参考: http://d.hatena.ne.jp/kakurasan/20090929/p1

2013-10-14

セルの値の連結

表計算ソフトでセルの値を連結するには以下の2つの方法がある。
  1. &演算子
    例: =A1&A2
  2. CONCATENATE関数
    例: CONCATENATE(A1;A2; …;An)
標準では範囲を指定して結合するのは不可能。セルを1つずつ選択・指定するしかない。非常に効率が悪いので何か工夫する。

 関数を使わずにやる方法

目的: セルA1からA100までの文字をつなげる。
    1. B1セルに=A1&B2。
      注: 区切り文字を入れたければ=A1&区切り文字&B2とする。
    2. B1セルをオートフィルでB100までコピー。
    3. B1セルにすべてが結合された文字列が表示。
参考:

 関数を使ってやる方法

エクセルであればユーザ定義関数を作ることで可能らしい。
 =MOJI(A1:A20) 
​
Function MOJI(XRange As Range) As String     
  Dim XCell As Range     
  For Each XCell In XRange     
    MOJI = MOJI & XCell.Value     
  Next XCell     
End Function 
Public Function U_StrCat(セル範囲 As Range, Optional 区切り文字 As String = "") As String
Dim result As String
Dim cell As Range
result = ""
For Each cell In セル範囲
If Len(result) > 0 Then
result = result & 区切り文字
End If
result = result & cell.Value
Next

U_StrCat = result
End Function
LibreOfficeのCalcでも実装できると何かと便利な気がする。誰か作ってくれないかな?

和文文書でCJKパッケージを使ってpdflatexを実行

LaTeXを使う上で、pdflatexは使えると何かと便利である。例えば、pdfpageパッケージは、pdfからページ範囲を指定してLaTeX文書中に取り込めるincludepdfコマンドを提供するが、これはpdflatexでないと動作しない。また、pdfに対してincludegraphicsコマンドを使いオプションにpage=ページ数を設定することでpdfの単一ページを指定して取り込むことができるが、この機能もpdflatexの方が使いやすい(platex+dvipdfmxでもオプションをうまく設定すれば可能。しかし、LyXでは大半の画像をepsに変換してから読み込むという仕様のため、pdflatexを使わないとこの機能は使えない)。この他にもTikZを使ってアニメーションを作るときなどもpdflatexを使わないといけないことがある。
pdflatexは標準では英語以外をサポートしていない。そのため、英語だけの文書でしか使えなかった。しかし、CJKパッケージとその他のいくつかのパッケージや設定を組み合わせることで日本語文書でもpdflatexが使える。CJKとは中国語(Chinease)・日本語(Japanese)・韓国語(Korean)の略である。CJKパッケージはlatexやpdflatexといった欧文TeXでこれらの言語を使うためのものである。
今回はCJKパッケージ類を使って日本語文書でpdflatexをLyXで使えるようにする設定を紹介する。LyX以外の普通のLaTeXシステムでもほぼ同様の手順をとることになるので参考になると思う。
参考:

 事前準備

作業環境
  • OS: Windows 7
    LyX: 2.1.0beta1
    TeXディストリビューション: W32TeX
必要なパッケージ
  • 以下のパッケージをCTANからDLしてインストールしておく。
    CJK
    CJKutf8
    CJKspace
    CJKpunct
    bxcjkjatype
zhmetricsのインストール
  • zhmetricsはCJK用のTFMフォントファイル群を提供する。インストールの手順を示す。
    1. CTANからzhmetricsをDL・解凍する。
    2. 解凍したフォルダ中のfontsフォルダをコピー(カットでも可)して以下の場所で貼り付け。
      $TEXMF-LOCAL/
      
      w32texを使っていれば$TEXMF-LOCAL=C:\w32tex\share\texmf-local
    3. 残りのファイルは以下のフォルダに保存
      $TEXMF-LOCAL/tex/latex/zhmetrics
      
    4. 最後にmktexlsrコマンドをコマンドプロンプトから実行。

 作業手順

  1. プリアンブルで日本語が登場する前にbxcjkjatyleを読み込む
    \usepackage[whole]{bxcjkjatype}
    
    このbxcjkjatyleの読み込み後であればプリアンブルでも日本語が登場してもOK。
  2. しおりの日本語文字化け回避
    • hyperrefかhypersetupにunicodeかpdfencoding=unicodeのオプションを設定。
    注: 上記の設定は後ろに追記すれば上書きできる。
  3. 文書クラスの設定(LyX)
    • documentclassを欧文系(jが頭につかないarticle, bookなど)に変更。
    • オプションでdvipdfmxは指定しない。
  4. エンコーディングの設定(LyX)
    • Document ▷ Settings… ▷ Language ▷ Encoding
      Language: Japanese (CJK)
      Other: Unicode (CJK) (utf8)
  5. プリアンブルで日本語固有のコマンドなどをコメントアウト。
    1. pxjahyperをコメントアウト(あれば)。
    2. otfパッケージをコメントアウト(あれば)。
    3. フォント指定textmc, textgtや長さ単位zwなど日本固有の設定を変更。
      フォント指定: textrm, textsfに統一。
      長さ単位: zwはemで代用する。使用にあたっては両者にはほとんど違いはない。

 フォント設定

必須ではないが、指定したフォントを設定して埋め込むために、bxcjkjatypeを読み込んだ後に以下の内容をプリアンブルに記入。
\setminchofont{ipaexm.ttf}
\setboldminchofont{mogamb002.ttf}
%\setlightminchofont{}
\setgothicfont{ipaexg.ttf}
\setboldgothicfont{migmix-1p-bold.ttf}
%\setxboldgothicfont{}
\setmarugothicfont{MTLmr3m.ttf}
以上のコマンドでフォントファイル名を直接指定することでpdflatexでの対応するフォントを指定できる。なお、pdflatexで指定可能なフォントファイルはttf形式のみとのこと。
今回はTable 3.1↓に示したフォント設定を行った。上記のコードではコメントアウトしているが、細明朝と極太ゴシックは適当なフォントが見つからなかったので設定していない。必要に応じてネットからここで設定した各フォントをDLしてインストールしておく。

Table 3.1 pdflatexでのフォントの設定例
書体
設定
明朝
IPAex明朝
明朝ボールド
MogaExMincho bold
ゴシック
IPAexゴシック
ゴシックボールド
MigMix 1P ボールド
丸ゴシック
モトヤLマルベリ3等幅

 MogaExMincho boldのインストール

今回使用したMogaExMincho boldはフォントファイルの用意に注意が必要なので導入の手順を説明する。
  1. http://yozvox.web.fc2.com/82A882B782B782DF8374834883938367.htmlにアクセス。
  2. [ゴシック&明朝 MoboGothic / MogaGothic / MogaMincho TTCパック]をDL・解凍。
    mogaフォントはttcファイルであり、このままではpdflatexで使えない。同じサイトで配布されているUniteTTCというプログラムで分割してttfファイルにする。
  3. http://yozvox.web.fc2.com/556E697465545443.htmlにアクセスし、UniteTTCをDL・解凍
  4. 2でできた[MoboMoga]フォルダから[mogamb.ttc]ファイルをドラッグし、3でできたUniteTTC.exeにドロップ。
  5. [MoboMoga]フォルダに以下のファイルが出来る。
    mogamb001.TTF
    mogamb002.TTF
    mogamb003.TTF
    mogamb004.TTF
    mogamb005.TTF
    mogamb006.TTF
    この内mogamb002.TTFをインストールする。このフォントがMogaExMincho boldである。インストールは右クリックメニュー ▷ インストール から可能だ。
以上でpdflatexに必要な設定は完了。後は通常通り文書を書いていくだけだ。使用例などについては参考元を当たって欲しい。

% 2013-10-14T14:05 表がおかしかったので修正。

Google日本語入力のインストール

半年ほど前にGoogle日本語入力をインストールしようとしたら、エラーが出て断念した。Microsoft Office IME 2010の使い勝手が悪いなと思ったのでGoogle日本語入力に切り替えた。

インストールしようとしたら以下のエラー
エラー:1603

以下のサイトが参考になった。
http://redheru.blogspot.jp/2013/01/google.html

サイトで示しているとおりにFixit
http://support.microsoft.com/mats/Program_Install_and_Uninstall/ja
というクリーンアップのプログラムを実行する。

どうやら以前Google日本語入力をインストールして使いづらかったからアンインストールした時に、きちんとアンインストールできていなかったのが原因だった。

以前よりもGoogle日本語入力の性能が上がっている。設定できる項目が増えていた。
作業効率が上がりそうだ。

2013-10-12

LyX 2.1でforward searchとinverse search[順検索・逆順検索]を導入

LyXの出力pdfと本文とで行ったり来たりするためにforward searchとinverse search (日本語では順検索・逆順検索)という機能がある。LaTeXを使った文書を作るときは以下の手順をとるのが一般的な流れだ。
  1. もとのソースコード(.tex, .lyxファイル)を書く
  2. ソースコードに(p)latexコマンドを実行(タイプセット)
  3. タイプセットでできるpdfやdviをプレビューして確認
この作業中に、プレビュー中のpdfで誤りや修正したい箇所を見つけたときにソースコード中での該当箇所へ素早く移動したいことがある。逆に、ソースコード中の該当箇所がプレビューでどのように表示されているかというのを素早く確認したいこともある。
これらの要望を実現する機能がforward searchとinverse searchだ。それぞれの機能は以下の機能を持つ。
forward search:
ソースコード⇒PDFへのジャンプ
inverse search:
PDF⇒ソースコードへのジャンプ
これら機能があれば、ダブルクリックなどをするだけで該当箇所へジャンプできる。この機能を使うには対応しているpdf viewerを使う必要がある。
以下のサイトを参考にLyXでこの機能を導入した。
参考:
http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?cmd=read&page=LyX%2F%E8%A8%AD%E5%AE%9A%2FWindows
  1. 作業環境
    PDF viewerとしてSumatraPDF version 2.4を使用した。今回作業を行ったPCのOSはWindows 7でありLyXのバージョンは2.1.0beta1である。なお、SumatraPDFはインストール済みとする。
  2. SumatraPDFとの同期設定
    Document⇒Settings…⇒Output
    Syncronize with Output
    Custom Macro:
    \synctex=1
  3. PDF設定
    dvipdfmとpdflatexで作ったpdfでforward/inverse searchできるようにするため設定する。
    Tools⇒Preferences…⇒File Handling⇒File Formats
    Format:
    PDF (dvipdfm)
    Viewer:
    Custom: start SumatraPDF -reuse-instance
    Format:
    PDF (pdflatex)
    Viewer:
    Custom: start SumatraPDF -reuse-instance
    Apply⇒Save
  4. forward search
    Tools⇒Preferences…⇒Output⇒General
    Forward search
    PDF comand:
    cmd /c start SumatraPDF -reuse-instance $$o -forward-search $$t $$n
    Apply⇒Save
    以上の操作でforward searchの設定は完了。
    実行方法:
    LyX中で以下のどちらかの方法でforward searchができる。
    • Navigate⇒Forward search
    • 右クリック⇒Forward search
  5. inverse search
    Tools⇒Preferences…⇒Paths
    LyxSever pipe:
    \\.\pipe\lyxpipe
    Apply⇒Save⇒LyXを再起動
    以下の内容のlyxeditor.cmdというファイルを作成。
    @echo off setlocal enabledelayedexpansion set file=%1 set row=%2 REM remove quotes from variables set file=!file:"=! set row=!row:"=! %comspec% /q /c (@echo LYXCMD:revdvi:server-goto-file-row:%file% %row%)> \\.\pipe\lyxpipe.in&&type \\.\pipe\lyxpipe.out endlocal
    作成したlyxeditor.cmdを以下の場所に配置。

    C:\Program Files\LyX 2.1\bin
    SumatraPDFを開く⇒設定⇒オプション⇒逆順検索コマンドラインの設定⇒以下の内容を記述。

    "C:\Program Files\LyX 2.1\bin\lyxeditor.cmd" "%f" %l
    以上でSumatraPDFのinverse searchの設定が完了。
    実行方法:
    SumatraPDFでダブルクリックするとLyX中の該当箇所にジャンプする。

Google+のRSSフィードを取得してTwitterなどに転送

RSSフィードを利用してGoogle+から投稿したら同時にTwitterにも投稿されるようにする。大きくRSSフィードの取得とTwitterへの投稿の2つの手順に分かれる。
RSSの取得
Google+のRSSを取得する方法にはいくつかあるが、一番簡単そうだと思った方法を示す。以下の形式のURLで自分のGoogle+のRSSのアドレスを取得可能。
http://gplus.slfeed.net/RSS2/(自分のID)
自分のIDとはGoogle+の自分のプロフィールを表示させたときにアドレスバーに表示される20桁くらいの数字のこと。RSSの取得に際し、無料でアカウント登録が不要なので最も手軽だと思う。
Twitterへの投稿
Google+で投稿したときにTwitterへも同時に投稿する方法にもいくつかある。以前はPostlogというサービスを利用していたが、サービス終了のため今回の調査しなおした。今回は一番汎用性の高いと思われるIFTTTを用いて行う。
  1.  IFTTTのサイトhttps://ifttt.com/dashboardに行く。
  2.  [Create]をクリックしてレシピを作成。
  3.  [this]をクリック⇒[Feed]をクリック⇒[New feed item]⇒Feed URLに取得したGoogle+のRSSのURLをコピペ⇒{Create Trigger]
  4.  例えば今回はTwitterが投稿されるように設定。
RSSフィード:
http://lovemac.jp/blog/1059/
ライフハッカの記事:
http://www.lifehacker.jp/2013/09/130929sns_connected.html

2013-10-08

platex+dvipdfmxでpdfに動画を埋め込む方法

LaTeXで動画を扱うには大きく4つの方法がある。
  1.  media9パッケージの\includemediaコマンド
  2.  mutimediaパッケージの\movieコマンド
  3.  movie15_dvipdfmxパッケージの\includemovieコマンド
  4.  hyperrefパッケージのhrefでリンクを貼る方法
media9
\includemedia[<option>]{<poster text>}{<main Flash (SWF) file or URL | 3D (PRC, U3D) file>}
  •  movie15パッケージの上位版という扱いらしい。
  •  pdflatexでやらないと無理。
  •  platex+dvipdfmxに未対応なもよう。
参考:
  •  http://empitsu.hatenablog.com/entry/2012/11/02/182722
  •  http://tex.stackexchange.com/questions/45242/animations-with-movie15-and-swf-files
multimediaパッケージ(beamer)
\movie[<options>]{<poster text>}{<movie filename>}
  •  multimediaパッケージはbeamerのパッケージの中に入っていて、beamerを読み込むと自動で読み込む。
  •  これ単体でplatex+dvipdfmxで動画を埋め込もうとするとうまくいかない。
  •  externalviewerオプションを指定していればなくても一応いけた。その場合はhrefと同様外部リンク扱い。
  •  movie15_dvipdfmxを読み込んでいるとなぜかうまくいった。
参考:
http://locs.bw.nitech.ac.jp/~kobayashi/fswiki/wiki.cgi?page=LaTeX-Beamer
movie15_dvipdfmx
\includemovie[<options>]{<width>}{<height>}{<media file>}
  •  movie15パッケージは昔(2000年頃)からあるので安定している。
  •  通常のmovie15パッケージだとうまくいかないので、修正されたmovie15_dvipdfmxパッケージを使う。
  •  multimediaパッケージの\movieコマンドよりオプションが多い。
参考:
  •  http://www.cas.cmc.osaka-u.ac.jp/~paoon/OriginalDoc/
  •  http://f3.acs.i.kyoto-u.ac.jp/~syuji/20081101/movie.pdf
  •  http://wkouw.web.fc2.com/WATAPEDIA_tex/Word_douganosounyu/douganosounyu.pdf
リンクを貼る
\href{run:<movie path>}{<poster name>}
  •  一番手軽。ファイルサイズも小さくて済む。
  •  埋め込むことはできない。
  •  動画とのファイルの位置関係が大事。
参考:
http://stackoverflow.com/questions/2428372/insert-video-clip-in-a-lyx-presentation-and-play-it-in-gnu-linux
以上の比較から現状はオプションの多さから、movi15_dvipdfmxパッケージを読み込んでおいて、\includemovieコマンドで埋め込むのがベストだと思う。オプションの数は少ないが、multimediaパッケージのmovieコマンドを使うのもあり。基本的な機能はどちらも抑えている。
どちらにしてもmovie15_dvipdfmxパッケージを読み込んでおくことが大事。

2013-10-07

LaTeXコードと実行結果の併記方法

LaTeXの使い方を文書にまとめる際に、LaTeXコードと実行結果を併記した方がわかりやすい。これを実現する方法をまとめる。
  •  showexplパッケージのLTXexample環境
    •  左に結果、右にコードを並べる。(オプションposにより位置の指定が可能。2013-12-21追記)
    •  自動で余白を調整してくれるのがよい。
    •  なぜかわからないが最近うまく動作しなくなった。
  •  tcolorboxパッケージのtcblisting環境など
    •  オプションの指定により縦に並べたり、横に並べたり自在に選択可能。
    •  余白の調整はしてくれないので、分量に応じて横に並べるか縦に並べるか判断が必要。
  •  pgfmanual-en-macosファイルで定義されているcodeexample環境
    •  TikZのマニュアルで使われていた環境
    •  余白を自動で調整し、足りなければ自動で上下になる。
    •  パッケージとして公開されていないので一般的でない。
showexplパッケージのLTXexample環境かtcolorboxパッケージのtcblisting環境などを利用するのがよさそうだ。
参考:
http://tex.stackexchange.com/questions/110349/any-way-to-show-latex-example-code-and-execute-it

2013-10-05

LaTeXで表の中の棒グラフを描画

LaTeXを文書中の表の中などでデータを可視化するために手軽に棒フラフを書けるようにする。[xcolor.sty: LaTeX パッケージ]のサイトの「booktabs.styを伴う。」が元ネタ。

棒グラフを実現するために以下の内容をプリアンブルに記入。

\newlength{\basis}\setlength{\basis}{10cm} \newlength{\barlength}
\newcommand*{\barchart}[1]{%
  \setlength{\barlength}{0.01\basis}\setlength{\barlength}{#1\barlength}%
  \textcolor{black!40}{\rule{\barlength}{1.5ex}} #1}

元のサイトのサンプルは\Barコマンドで定義されている。このコマンド名はamsmath.styの同名コマンドと競合する。そのため,\Bar\barchartという名前に置き換える。また,単位%は邪魔なので除去した。

これにより,以下のコマンドで長さ10 cmの横棒グラフが書ける。

\barchart{100}

ただし,長さの都合から棒グラフで使う値は0–100程度の範囲の値が適している。この範囲外なら、うまく%や正規化してこの範囲に値を収める。値をマイナスにすると棒グラフが表示されない。

\barchart{-10}

表の中に書いてそれっぽく見せるには例えば以下のようにする。グラフを書くところを左寄せにすることが大事。

\begin{center}
  \begin{tabular}{ll}
  \toprule 
  year & value {[}\%{]}\tabularnewline
  \midrule
  2000 & \barchart{50}\tabularnewline
  \midrule 
  2010 & \barchart{30}\tabularnewline
  \bottomrule
  \end{tabular}
\par
\end{center}

サンプル全体

\documentclass[uplatex]{jsarticle}
% \file      barchart.tex
% \author    SENOO, Ken
% \copyright CC0
% \brief     以下のコマンドでタイプセットする。
% uplatex barchart && dvpidfmx barchart

\usepackage{xcolor,booktabs} \newlength{\basis}\setlength{\basis}{10cm} \newlength{\barlength} \newcommand*{\barchart}[1]{% \setlength{\barlength}{0.01\basis}\setlength{\barlength}{#1\barlength}% \textcolor{black!40}{\rule{\barlength}{1.5ex}} #1} \begin{document} \barchart{100} \barchart{-10} \begin{center} \begin{tabular}{ll} \toprule year & value {[}\%{]}\tabularnewline \midrule 2000 & \barchart{50}\tabularnewline \midrule 2010 & \barchart{30}\tabularnewline \bottomrule \end{tabular} \end{center} \end{document}

実行結果