2018年2月20日火曜日

[TeX] macOS High Sierra (TeXShop) でヒラギノ明朝体を使う

ヒラギノ明朝体が,High Sierra では合体版(ヒラギノ明朝 ProN.ttc)に変更されたので,dvipdfmx 等からは使えなくなってしまったようです.

公式対策は取られていませんが,フォントへのシンボリックリンクと dvipdfmx 等用の Map ファイルを手動で作成すれば,ヒラギノ明朝体を使うことができるようです.
(参考にしたサイトhttp://okumuralab.org/bibun7/)

ヒラギノを dvipdfmx から利用する3 step.

Step 1: ファイルの入手と設置
High Sierra 用のリンクと Map ファイルを入手する(ダウンロードはこちらから).
このファイルには,
ヒラギノフォントへのシンボリックリンク
実フォントと仮想フォントとの対応関係を記した Map ファイル
が入っています.
これをダウンロードして,中身のフォルダ構成を保ったまま適切なフォルダにコピーする(通常は /usr/local/texlive/)

Step 2: TeX への登録
Step 1で設置したファイルを TeX が見つけられるよう,ターミナルから以下のコマンドを実行します.

管理者権限が必要な場合
$ sudo mktexlsr
Password:

管理者権限が不要な場合
$ sudo mktexlsr

Step 3: Map ファイルの生成
以下のコマンドを実行して,最初にコピーした Map ファイルから,dvipdfmx,dvips などを各 DVIware 用の Map ファイルを生成します.
$ updmap-user -setoption jaEmbed hiragino-highsierra-pron

このコマンドを実行すると(通常は)~/Library/texlive/2017/ 内に、kanjix.map 等の Map ファイルが生成されます.
システム全体で共有したい場合は、updmap-user ではなく updmap-sys を使います(sudo が必要か否かは mktexlsr の場合と同様)

以下は,実行例です.
$ sudo mktexlsr
Password:
mktexlsr: Updating /usr/local/texlive/2017/texmf-config/ls-R... 
mktexlsr: Updating /usr/local/texlive/2017/texmf-dist/ls-R... 
mktexlsr: Updating /usr/local/texlive/2017/texmf-var/ls-R... 
mktexlsr: Updating /usr/local/texlive/texmf-local/ls-R... 
mktexlsr: Done.
$ updmap-user -setoption jaEmbed hiragino-highsierra-pron
updmap will read the following updmap.cfg files (in precedence order):
  /usr/local/texlive/2017/texmf-dist/web2c/updmap.cfg
updmap may write changes to the following updmap.cfg file:
  /Users/hide/Library/texlive/2017/texmf-config/web2c/updmap.cfg
Creating new config file /Users/hide/Library/texlive/2017/texmf-config/web2c/updmap.cfg
dvips output dir: "/Users/hide/Library/texlive/2017/texmf-var/fonts/map/dvips/updmap"
pdftex output dir: "/Users/hide/Library/texlive/2017/texmf-var/fonts/map/pdftex/updmap"
dvipdfmx output dir: "/Users/hide/Library/texlive/2017/texmf-var/fonts/map/dvipdfmx/updmap"

updmap is creating new map files
using the following configuration:
  LW35 font names                  : URWkb (/usr/local/texlive/2017/texmf-dist/web2c/updmap.cfg)
  prefer outlines                  : true (/usr/local/texlive/2017/texmf-dist/web2c/updmap.cfg)
  texhash enabled                  : true
  download standard fonts (dvips)  : true (/usr/local/texlive/2017/texmf-dist/web2c/updmap.cfg)
  download standard fonts (pdftex) : true (/usr/local/texlive/2017/texmf-dist/web2c/updmap.cfg)
  jaEmbed replacement string       : hiragino-highsierra-pron (/Users/hide/Library/texlive/2017/texmf-config/web2c/updmap.cfg)
  jaVariant replacement string     : <empty> (default)
  scEmbed replacement string       : arphic (/usr/local/texlive/2017/texmf-dist/web2c/updmap.cfg)
  tcEmbed replacement string       : arphic (/usr/local/texlive/2017/texmf-dist/web2c/updmap.cfg)
  koEmbed replacement string       : baekmuk (/usr/local/texlive/2017/texmf-dist/web2c/updmap.cfg)
  create a mapfile for pxdvi       : false (default)

Scanning for LW35 support files  [  3 files]
Scanning for MixedMap entries    [ 44 files]
Scanning for KanjiMap entries    [ 11 files]
Scanning for Map entries         [265 files]

Generating output for dvipdfmx...
Generating output for ps2pk...
Generating output for dvips...
Generating output for pdftex...

Files generated:
  /Users/hide/Library/texlive/2017/texmf-var/fonts/map/dvips/updmap:
       15814 2018-02-20 19:35:31 builtin35.map
       21287 2018-02-20 19:35:31 download35.map
     2095980 2018-02-20 19:35:32 psfonts_pk.map
     2356875 2018-02-20 19:35:31 psfonts_t1.map
     2350288 2018-02-20 19:35:31 ps2pk.map
          14 2018-02-20 19:35:32 psfonts.map -> psfonts_t1.map
  /Users/hide/Library/texlive/2017/texmf-var/fonts/map/pdftex/updmap:
     2350295 2018-02-20 19:35:32 pdftex_dl14.map
     2348630 2018-02-20 19:35:32 pdftex_ndl14.map
          15 2018-02-20 19:35:32 pdftex.map -> pdftex_dl14.map
  /Users/hide/Library/texlive/2017/texmf-var/fonts/map/dvipdfmx/updmap:
       10923 2018-02-20 19:35:31 kanjix.map

*************************************************************
*                                                           *
* WARNING: you are switching to updmap's per-user mappings. *
*            Please read the following explanations.        *
*                                                           *
*************************************************************

You have run updmap-user (as opposed to updmap-sys) for the first time; this
has created configuration files which are local to your personal account.

Any changes in system map files will *not* be automatically reflected in
your files; furthermore, running updmap-sys will no longer have any
effect for you.  As a consequence, you have to rerun updmap-user yourself
after any change in the system directories; for example, if a new font
package is added.

See http://tug.org/texlive/scripts-sys-user.html for details.

If you want to undo this, remove the files mentioned above.

(Run updmap --help for full documentation of updmap.)

Transcript written on "/Users/hide/Library/texlive/2017/texmf-var/web2c/updmap.log".
updmap: Updating ls-R files.

2018年2月14日水曜日

[gnuplot] 複数のグラフを一枚にプロットする

gnuplotで,複数のプロットを一枚に描く(同じようなグラフを並べる)方法のメモです.
以下にスクリプトの例を示します.青字部分が,複数グラフのプロットに関連したコマンドです.

set multiplot layout 2,3 rowsfirst downwards title "Lissajous curve"
set parametric
set samples 1000
set xrange [-1.2:1.2]
set yrange [-1.2:1.2]
set trange [0:2*pi]
set key outside center top samplen 0
plot cos(1*t),sin(2*t)
plot cos(1*t),sin(3*t)
plot cos(2*t),sin(3*t)
plot cos(2*t),sin(5*t)
plot cos(3*t),sin(5*t)
plot cos(4*t),sin(5*t)
unset multiplot

<解説>
set multiplot layout 2,3 rowsfirst downwards title "Lissajous curve"
複数プロットをする宣言(set multiplot)を行います.
例では"layout 2,3"によって縦2行,横3列にプロットすることを宣言しています.
"rowsfirst"は行(横)優先に並べる(プロットするグラフが左,右...と並べられる)ことを意味します.
列(縦)優先に並べる場合は"columnsfirst"とします(プロットするグラフが上,下...と並べられる).
"downwards" は下方向に並べること意味します.上記の例の場合は最初に左から右に3個のプロット
plot cos(1*t),sin(2*t)
plot cos(1*t),sin(3*t)
plot cos(2*t),sin(3*t)
が並べられた後に,次の列に移って以下の3個のプロットが左から右に並べられることになります.
plot cos(2*t),sin(5*t)
plot cos(3*t),sin(5*t)
plot cos(4*t),sin(5*t)

このスクリプトを実行すると,以下のような図が作成されます.



2018年2月5日月曜日

[Pyrhon] コイントスで表か裏が10回連続で出る確率

エレガントな解法、エレファントな解法 〜モンテカルロ法を添えて〜」という山本一成さんのnoteにあったプログラムを実行してみた際のメモです.

問題は
 コインを100回投げて、表か裏が10回連続で出る確率は?
というものです.
これを実際にコイントスをやってみて確かめるという方法です.
具体的には,コンピュータの中で乱数(ランダム)を発生させ,それでコイントスをしていることとするというものです.

pythonでのプログラムは以下のとおりです.

import numpy

def cointoss(try_count, length):
    x = 0
    prev_ret = None
    for _ in range(try_count):

        ret = numpy.random.randint(0, 2)
        if prev_ret == ret:
            x += 1
            if x >= length:
                return True
        else:
            prev_ret = ret
            x = 1
    return False

def monte_carlo(try_count):
    x = 0.0
    y = 0.0
    for _ in range(try_count):
        if cointoss(100, 10):
            x += 1
        y += 1
    return 100.0 * x / y

print("   100 : {0}%".format(monte_carlo(100)))
print("  1000 : {0}%".format(monte_carlo(1000)))
print(" 10000 : {0}%".format(monte_carlo(10000)))

print("100000 : {0}%".format(monte_carlo(100000)))

これをコンパイル,実行してみると以下のようになりました.
$ python cointoss.py
   100 : 9.0%
  1000 : 9.4%
 10000 : 8.91%
100000 : 8.695%

上記の記事の中では,近似解が
       100回: 14.0%
     1000回 : 8.8%
    10000回: 8.89%
  100000回: 8.773%
となっています.
正解は8.669%だそうです.

ちなみに,プログラムの最後の部分に

print(" 1000000 : {0}%".format(monte_carlo(1000000)))
print("10000000 : {0}%".format(monte_carlo(10000000)))

と書き足して,3回実行させてみた結果は以下のとおりです.

(その1)
$ python cointoss.py
     100 : 10.0%
    1000 : 8.4%
   10000 : 8.94%
  100000 : 8.535%
 1000000 : 8.6777%
10000000 : 8.66218%

(その2)
$ python cointoss.py
     100 : 11.0%
    1000 : 7.5%
   10000 : 8.87%
  100000 : 8.634%
 1000000 : 8.6414%
10000000 : 8.67728%

(その3)
$ python cointoss.py
     100 : 6.0%
    1000 : 10.1%
   10000 : 9.0%
  100000 : 8.815%
 1000000 : 8.5956%
10000000 : 8.68189%