もちっとメモ

もちっとメモ

もぐりのエンジニアが日々の中で試してみたことを気が向いたときに書き連ねていきます

引用が増えてきたのでBibtexを導入してみた

最近,長めの文章をTexで書く機会があり,参考文献も増えてきたのでこの機にBibTexなるものを導入してみた.導入するといっても,文献データだけ別ファイルに用意してそれを読み込むだけなので,新しくソフトウェアをダウンロードするほど大したものではないです.
と思っていたのですが,意外とこれが時間がかかりました.知ってしまえばなんてことはないのですが,今回はズバッと自分のニーズに答えてくれるサイトがないので1~2時間ネット上をふらふらしました.(いつものことですが(笑))

必要なものは次の2つ(3つ)です.
Texファイル(.tex) これがないとどうしようもないですね.
・Bibファイル(.bib) これは自分で作る(コピペする)必要があります.
・Bstファイル(.bst) BibTexを使うときのスタイルファイルのようなものです.デフォルトでも用意されていますが,「○○論文みたいにしたい」と思うときはダウンロードしてみるといいと思います.いろいろな論文誌のスタイルが各論文誌のサイトからダウンロードできます.

・ステップ1:Bibファイルを用意する.
一言でいうと文献データベースのようなものです.
まず,メモ帳等をひらいて,「Reference.bib」というファイル名で保存しましょう.このときTexファイルと同じディレクトリに保存しましょう.(Texから参照できる形になっていれば同ディレクトリでなくても大丈夫です)
Bibファイルができたら中身を書きこみます.手書きもできますが,だいたい各論文誌が用意してくれているケースが多いので各論文のページを開いて「BibTex」や「Citaition」という単語を探しましょう.私がよく見るPhysical Review系では「Export Citation」のボタンを押すと,BibTexフォーマットのテキストが表示されます.ダウンロードもできますが,一つのBibファイルにまとめたいので先ほどの「Reference.bib」にテキストをコピペして保存しましょう.
※論文誌によってはBibTex形式で用意していないサイトもあります.(実際にScientific ReportではBibTex形式では用意していなくて,1時間ほどウロウロしました.)個人的なおすすめはGoogleScolarから検索して引用ボタンから取得です.他にもMendeleyを使っていればこちらから取ってくることもできます.

・ステップ2:Texファイルにいろいろ書きこむ.
(1)\documentclassの下あたりに
\bibliographystyle{plain} ←後述しますが,{}にはBstファイル名を入力してください.
と書きます.
(2)参考文献を表示させたい位置に
\bibliography{Reference} ←{}にはBibファイル名を入力してください.先ほど作った「Reference.bib」などのことです.
基本的には入力事項はこの2つです.あとはコンパイル時に
pdftex等(いつもやっているコンパイル)→bibtex→pdftex等(いつもの)
の順にコンパイルすれば,Bibファイルの内容が反映されて表示されるはずです.うまくいかないときはいつものコンパイルを何回か繰り返してみてください.
\citeなどは通常通りに使えます.ラベル名はBibファイルの先頭に書いてあるものを参照することになります.@article{の次くらいに書いてあるやつです.ダウンロードしてきたときはデフォルトでは論文番号や著者名+年号などになっておりことが多いです.適宜変更してください.

・ステップ3(オプション):Bstファイルでスタイルを変更する.
ステップ2ではしれっと「plain」を使いましたが,他にも種類はたくさんあります.自作もできますが,ネットからテンプレートをダウンロードしてくればよいでしょう.個人的なおすすめはデフォルトあるものなら
unsrt
ダウンロードしてくるなら
jpsj
です.いろいろ試してお気に入りのフォーマットを探してみてください.日本語文献の場合は頭にjをつければ使えることが多いです.「jplain」など.

 

おまけ:citeの連番を省略表記させる.
文章中で引用文献が
[1,2,3,4,5]
とかなっていると長くてダサいな.できれば,
[1-5]
とかにしたいなと思ったときは,プリアンブルに
\usepackage{cite}
を付け加えてください.コンパイルが通らないときはスタイルファイルがない場合があるので,こちらからダウンロードしてみてください.

追記:2017.01.05
私はTexworksを使っているのですが、日本語文献スタイルのbst(jplain)などを使うとうまく表示されませんでした。具体的には著者名が本のタイトルになってしまいました。どうやらコンパイル方法がわるいらしいです。こちらのサイトを参考にタイプセットをいじるとうまくいきました。

hanzomemo.blogspot.jp

BibTeX を使った文献目録の作成 - Okomeda Net

本のbib情報はLead2Amanozが便利です。アマゾンで扱っている本ならタイトルや著者名で検索すればBIbデータを表示してくれます。

lead.to

Webページの場合の書き方はこちらを参考になります。

\usepackage{url}

\url というコマンドがポイント。

のくだりはURLにアンダーバー"_"が含まれる際に関係あるみたいです。

d.hatena.ne.jp

また,所望の形式のbstファイルがないときは自分で書き換えるのも手かもしれません.

d.hatena.ne.jp

www.ketsuago.com

Texworksで文字コードを変更する

先日,先方にTexソースコードを送ったら,「文字化けして見れんのだが.どうにかしてくれ」と言われてしまった.
どうやら先方はデフォルトがSJISになっているようだ.
面倒くさいと思いつつ,自分の使っている環境であるTexworksで文字コードの変換ができないかどうか調べてみた.

結論から言うと,表示変更はできるが文字コードを変換して保存は不可能っぽい.
Texworksで表示する文字コードを変更する際は[編集]-[設定]ー[エンコーディング]で文字コードを変更して開く(またはTexworksを再起動する)で任意の文字コード(用意されているものに限る)に対して表示は可能なよう.ちなみに,私の使っているバージョンではSJISはSystemになっていた.Windowsだからだろうか.
ただ,Texworks自体で文字コードを変更して保存することは無理っぽい.例えば,もともとUTF-8で書いたものをSJISで保存するなど.
そのときは,ほかのテキストエディタ(TerapadやSublimeTextなど)で文字コードを指定して保存する必要があるみたい.
どうしてもTexworksでやりたければ,書いた内容をコピーしておいて,一度エンコーディング文字コードを変更,Texworksを開き直して,ペーストすれば可能ではあった.面倒なことには変わりないが.

今どき,どのTexエディタもデフォルトはUTF-8なのにSJISでしか表示やコンパイルしかできない(というか相手方がその手の設定が自力でできない)からいちいち文字コードを変更して送らなきゃならないなんて面倒くさすぎる.多数派に合わせる努力をしてほしい.

2016年 個人的注目のアドベントカレンダー(年内随時更新)

お恥ずかしながら最近アドベントカレンダーなるものの存在を知りました。そこで、個人的に何と無く気になっている、読んでみようかなと思っているアドベントカレンダーをつらつらと書きます。基本的には自分への備忘録です。それでもよろしければどうぞ。adventar.org

adventar.org

adventar.org

adventar.org

adventar.org

adventar.org

 

Texでスライドを作る

Texでスライドを作る
目次や現在位置を簡単に表示させられるし,数式はきれいに作れるから一度試してみたい.
でも,パワーポイントみたいに直感的に作れなさそうなのでめんどくさいかも.
参考サイト
プレゼンテーション用 LaTeX クラス Beamer の使い方メモ

テンプレートLaTeX チートシート (作成途中)


追記:2016/12/22
実際に作ってみました.
テンプレシート+\usepackage{beamerthemeshadow}で思っていた通りのスライドができました.
確かに出来はかっこいい.数式も美しい.Tex感覚で入力もできる.
でも,動画埋め込めないよね?逐次文字サイズを調節するのは面倒.レイアウトの柔軟さがない?
勉強すればいいものが作れるかもしれないけど,慣れるまでは時間がかかりそう.

 

ベクトル場を書いて分岐現象を見たい

ホップ分岐やサドル・ノード分岐など分岐現象を可視化する方法として方程式のベクトル場を見ることがあります.
以下はサンプルコードです.
C++コード

    
    
      #define _USE_MATH_DEFINES
      #include <math.h>
      #include <fstream>
      #include <iostream>
      #include <thread>
      #include <vector>
      const double Delta=0;
      const double deltaOmega=1;
      const double Omega1=1;
      const double Omega2=Omega1+2*deltaOmega;
      const double strength=1;
      const double p=1;
      //x軸(極座標なら動径)方向の微分方程式
      float funcx(float x, float y){
       return (-Delta + strength / 2.0*(1 - p)*(1 - x*x))*x + strength*p*(x*(1 - x*x) / 2.0)*cos(y);
       }
      //y軸(極座標なら偏角)方向の微分方程式
      float funcy(float x, float y){
       return fabs(Omega2 - Omega1) - strength*p*(1 + x*x)*sin(y);
      }
      //ベクトル場の出力
      void vector_field(){
       double beginx=0; //x軸の最小値(極座標なら動径)
       double endx=1; //x軸の最大値
       double beginy=0; //y軸の最小値(極座標なら偏角)
       double endy = 2.0*M_PI; //y軸の最大値
       double step=0.1; //ベクトル場のステップ幅
       float x, y, deltax, deltay, norm; //変数
       char filename[100];
       sprintf(filename, "vector_field.dat");
       ofstream output(filename); //ファイル出力
       for (x = (beginx-step); x <= (endx+step); x = x + step){
        for (y = beginy; y <= endy; y = y + step){
         norm = sqrt(funcx(x, y) * funcx(x, y) + funcy(x, y)*funcy(x, y));
         deltax = funcx(x, y) / (1.0 + norm)*step;
         deltay = funcy(x, y) / (1.0 + norm)*step;
         output << y << " " << x << " " << deltay/step << " " << deltax/step << endl;
        }
       }
    output.close();
    }
    int main(){
     vector_field();
     return 0
    }
    

Gnuplotコード

    
      set isosamples 200,300
      set term pngcairo enhanced size 640,480
      set polar
      set grid polar
      set size square
      set xrange [-1.1:1.1]
      set yrange [-1.1:1.1]
      set key outside top center reverse Left
      set o sprintf("vector_field.3f.png")
      plot \
      sprintf("vector_field-p%.3f-w%.3f-d%.3f.dat",p,i*a,d) with vector,
    

参考サイト

gnuplotで二次元のベクトル場を綺麗に書く。ただしベクトル場はファイルから読み込む。poissondd.wordpress.com