アカデミックなメモ
TeX
TeXの学会スタイルファイル
一応、本家も。
あまり品のよくないdouble space化
\renewcommand{\baselinestretch}{1.5}
- Changing inter-line space using \baselinestretch
As a rule of thumb, parameters should be set on the highest possible level within a user interface.
So if you want to reset inter-line space you can do so on three levels:
1. Either by using the setspace.sty package;
2. or by using the LATEX command \linespread{<factor>};
3. or by redefining \baselinestretch.
Redefining parameters such as \baselinestretch works on the lowest LATEX level available—
which should better be left to packages. The \linespread command is provided for
this, so it is a better way to get more inter-line space than fiddling with \baselinestretch.
It is even better, though, to use setspace.sty which also takes care of space in footnotes and list
environments that you usually don’t want to change when modifying inter-line space.
So if you just need some more spacing between lines, say, you would like to set spacing to one
half or to double spacing, setspace.sty provides the easiest way to achieve this. However, if you
only want to use fonts other than Computer Modern you may use \linespread{<factor>}.
For example, when using Palatino \linespread{1.05} would be appropriate.
他人の文章にコメントなどを追加する用
多分、soutはstrikeoutの略。
\usepackage{color}% 適宜[dvipdfm]などを付けてください。
%\usepackage{ulem}
\usepackage[normalem]{ulem}
\newcommand{\tr}[1]{\textcolor{red}{#1}}
\newcommand{\trs}[1]{\textcolor{red}{\sout{#1}}}
\newcommand{\tb}[1]{\textcolor{blue}{#1}}
\newcommand{\tbs}[1]{\textcolor{blue}{\sout{#1}}}
%\newcommand{\tg}[1]{\textcolor{green}{#1}}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\newcommand{\tg}[1]{\textcolor{darkgreen}{#1}}
\newcommand{\tgs}[1]{\textcolor{darkgreen}{\sout{#1}}}
\definecolor{purple}{rgb}{0.5,0,0.5}
\newcommand{\tp}[1]{\textcolor{purple}{#1}}
\newcommand{\tps}[1]{\textcolor{purple}{\sout{#1}}}
tex改行位置調整
図表の位置制御
\renewcommand{\topfraction}{1.1}
\renewcommand{\bottomfraction}{1.1}
\renewcommand{\dbltopfraction}{1.1}
\renewcommand{\textfraction}{-0.1}
\renewcommand{\floatpagefraction}{1.1}
\renewcommand{\dblfloatpagefraction}{1.1}
\setcounter{topnumber}{5}
\setcounter{bottomnumber}{5}
\setcounter{totalnumber}{10}
book.clsでoneside
\documentclass[a4paper,oneside,12pt]{book}
aspell list
#!/bin/bash
#cat ./tex_en/*.tex | aspell --lang=en --mode=tex list | sort > mispelledwords_out
filedate=`date +%Y%m%d_%k%M%S`
filename=mispelledwords_out
echo "# ${filedate}" > ${filename}
for i in ./tex_en/*.tex
do
echo "#----" >> ${filename}
echo "# ${i}" >> ${filename}
cat ${i} | aspell --lang=en --mode=tex list >> ${filename}
done
rm -f *~
bibtexリスト自動生成関連
getpaper -j prl -v 99 -p 052502
or
getpaper -f [input_file]
- Turning DOIs into formatted citations
curl -LH "Accept: text/bibliography; style=bibtex" http://dx.doi.org/10.1038/nrd842
or
curl -LH "Accept: application/x-bibtex" http://dx.doi.org/10.1038/nrd842
- Towards minimal bibliographic managment software
itemizeで改行したときに左はじをそろえる方法
gs, eps2eps, ps2pdf, pdftkの仕様やバグ
gsによる処理
BoundingBoxの取得(BoundingBoxを修正したいとき)
gs -q -sDEVICE=bbox -dNOPAUSE -dSAFER -dBATCH -dDEVICEWIDTH=250000 -dDEVICEHEIGHT=250000 input.ps > output.bb 2>&1
PS本文の取得(重いPSを軽くしたいとき)
gs -q -sDEVICE=epswrite -dNOPAUSE -dSAFER -dBATCH -dDEVICEWIDTH=250000 -dDEVICEHEIGHT=250000 -sOUTPUTFILE=output.ps input.ps
サイズが小さいとBoundingBoxを間違えるようなので
-dDEVICEWIDTH=250000 -dDEVICEHEIGHT=250000
とPSの幅を大きめに取ってる。これでも誤るようなら、
もっと大きい値を入れればよい。
psのBoundingBoxに合わせたpdf作成
psのBoundingBoxに合わせてpdfをつくりたいときは
ps2pdf -dEPSCrop foo.ps
とすればいいらしい。
だが、-dEPSCropでpsをpdfにするとき、できあがった
pdfのBoundingBoxがA4になるときがある。
そんなときは、psの頭を
%!PS-Adobe-3.0 EPSF-3.0
pdfから正しいBoundingBoxのついたepsを作成
#!/bin/bash
TARGET=${1%.pdf}.eps
echo "pdftops -eps ${1} - | ps2eps > ${TARGET}"
pdftops -eps ${1} - | ps2eps > ${TARGET}
echo "ps2eps stdout redirected to: ${TARGET}"
使えそうなネタ
まとめ
全部合わせると
#!/bin/bash
input=$1
output=$2
gs -q -sDEVICE=bbox -dNOPAUSE -dSAFER -dBATCH \
-dDEVICEWIDTH=250000 -dDEVICEHEIGHT=250000 \
${input}.ps > ${output}_tmp.bb 2>&1
gs -q -sDEVICE=epswrite -dNOPAUSE -dSAFER -dBATCH \
-dDEVICEWIDTH=250000 -dDEVICEHEIGHT=250000 \
-sOUTPUTFILE=${output}_tmp.ps ${input}.ps
head -1 ${output}_tmp.ps > ${output}.ps
cat ${output}_tmp.bb >> ${output}.ps
tail -$(( `wc -l < ${output}_tmp.ps` - 3 )) \
${output}_tmp.ps >> ${output}.ps
rm ${output}_tmp.*
ps2pdf -dEPSCrop ${output}.ps
でpsのソースを綺麗に整形して、pdfにできる。
A0ポスター完全アウトライン化(フォント文字化け対策)
一部のプリンターではA0印刷したときに、「フォントの埋込み」をした文字ですら文字化けすることがある。
それに対処する方法として、pdfのアウトライン化(全画像化)を紹介する。まず、pdfをepsに変換する。その後、gsを使ってepsをアウトライン化する。解像度は"-r"で指定する。最後に、epsをpdfに変換する。
pdftops -eps input.pdf
gs -q -sDEVICE=epswrite -dNOPAUSE -dSAFER -dBATCH -dDEVICEWIDTH=2500000 -dDEVICEHEIGHT=2500000 -r9600 -sOUTPUTFILE=output.eps input.eps
ps2pdf -dEPSCrop output.eps
rm input.eps output.eps
難点は、ファイルサイズが重くなることとBoundingBoxがずれること。後者はeps作成後に手動で書き換えれば、対処できなくはないが…。
文字のみのアウトライン化
上のコマンドで、widthとresolutionを指定する代わりに、
-dNOCACHE
を付け加えればよい。
eps圧縮関連
手書きepsの図作成関連
pdf分割・結合
pdftk in.pdf cat n output out.pdf
mページ目からnページ目を切り出し
pdftk in.pdf cat m-n output out.pdf
10ページ目削除
pdftk A=in.pdf cat A1-9 A11-end output out.pdf
全pdf結合
pdftk *.pdf cat output out.pdf
pdfのパスワード解除
pdftk a.pdf input_pw YOUR_PASSWORD output b.pdf
gnuplotの図の入ったtex文書をdvipsで処理するとpdfinfoがバグる
図の作成関連
gnuplotの図の修正
gnuplotでつくったsvgの図をInkscapeで編集
pstoedit -f plot-svg input.eps output.svg
とやってsvgをつくる。
フォントをいじらないなら、pdfをinkscapeで処理すればよい。
フォントをいじりたいなら、svgをgnuplotで吐き出す。
その際、
set term svg font "Nimbus Roman No9 L"
とでも指定すればよい。残念ながら、ItalicとかBoldへの
フォント変更はsvgを直接編集しないとダメっぽい。
こうして作成したinkscapeのsvgを編集後、epsを吐き出すと、
しばしばeps中のマイナスがハイフンになっている。具体的には、
「フォントを埋め込む(タイプ1のみ)」にチェックを入れると、マイナスがハイフンになる。
「フォントを埋め込む(タイプ1のみ)」にチェックを入れなければ、マイナスはマイナスのままである。
epsを確認すると、後者はISO Latin-1 encodingになっており、
ハイフンがマイナスとして無事に認識されている模様。
フォントの埋め込みがされていないのが嫌なら、
ps2pdf -dEPSCrop before.eps
pdftops -eps before.pdf after.eps
とでもしてください。
ちなみに、「『フォントを埋め込む(タイプ1のみ)』に
チェックを入れない」という後者の操作は
inkscape 0.46の場合、
inkscape --export-eps=hoge.eps hoge.svg に相当。
0.47以降は埋め込まないオプションが
削除されてるらしいので、
https://bugs.launchpad.net/inkscape/+bug/375323
「フォント埋め込まない」っていう方法では無理かも。
そのときは、svgファイルのハイフンを
地道にマイナスに置換するしかないかな。
gnuplotでつくったepsをtexでpdfにするときのフォント埋め込み
gnuplotでつくったepsをtexでpdfにするとき、
Nimbus Roman No9 Lなどではなく、
Times Romanなどを埋め込みたい場合の話。
gs_pdfwr.psを編集する。
# ubuntu hardyでは
# /usr/share/ghostscript/8.61/lib/gs_pdfwr.ps
# ubuntu lucidでは
# /usr/share/ghostscript/8.71/Resource/Init/gs_pdfwr.ps
下記のようにコメントアウトする。
/.standardfonts [
% /Courier /Courier-Bold /Courier-Oblique /Courier0BoldOblique
% /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique
% /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic
% /Symbol /ZapfDingbats
] readonly def
図ではなく本文のフォント埋め込みは
linux:
dvips -Pdownload35 hoge.dvi
windows:
dvips -Pdl hoge.dvi
linux:
dvipdfmx -f dvipdfm_dl14.map hoge.dvi
windows:
dvipdfmx -f dlbase14.map hoge.dvi
らしい。
# Nibus系のフォントがTimes系の代わりに埋め込まれるらしい。
# これだけだと図のフォントは埋め込まれない。
gnuplot等でフォントを埋め込んだepsの軽量化
gnuplotでフォントを埋め込んだ後のepsは結構重くなる。
一旦ps2pdfなどでpdfにしてから、
その後pdftopsでepsに戻すと軽くなる。
ps2pdf -dEPSCrop before.eps
pdftops -eps before.pdf after.eps
なお、pdf2psではなくて、xpdf付属のpdftopsを用いた方がよい。
ghostscript/?.??/lib/Fontmap.GS
で確認せよ。ubuntu hardyでは
/usr/share/ghostscript/8.61/lib/Fontmap.GS
にあった。中身はこんな感じ。
/URWBookmanL-DemiBold (b018015l.pfb) ;
/URWBookmanL-DemiBoldItal (b018035l.pfb) ;
/URWBookmanL-Ligh (b018012l.pfb) ;
/URWBookmanL-LighItal (b018032l.pfb) ;
/NimbusMonL-Regu (n022003l.pfb) ;
/NimbusMonL-ReguObli (n022023l.pfb) ;
/NimbusMonL-Bold (n022004l.pfb) ;
/NimbusMonL-BoldObli (n022024l.pfb) ;
/URWGothicL-Book (a010013l.pfb) ;
/URWGothicL-BookObli (a010033l.pfb) ;
/URWGothicL-Demi (a010015l.pfb) ;
/URWGothicL-DemiObli (a010035l.pfb) ;
/NimbusSanL-Regu (n019003l.pfb) ;
/NimbusSanL-ReguItal (n019023l.pfb) ;
/NimbusSanL-Bold (n019004l.pfb) ;
/NimbusSanL-BoldItal (n019024l.pfb) ;
/NimbusSanL-ReguCond (n019043l.pfb) ;
/NimbusSanL-ReguCondItal (n019063l.pfb) ;
/NimbusSanL-BoldCond (n019044l.pfb) ;
/NimbusSanL-BoldCondItal (n019064l.pfb) ;
/URWPalladioL-Roma (p052003l.pfb) ;
/URWPalladioL-Ital (p052023l.pfb) ;
/URWPalladioL-Bold (p052004l.pfb) ;
/URWPalladioL-BoldItal (p052024l.pfb) ;
/CenturySchL-Roma (c059013l.pfb) ;
/CenturySchL-Ital (c059033l.pfb) ;
/CenturySchL-Bold (c059016l.pfb) ;
/CenturySchL-BoldItal (c059036l.pfb) ;
/NimbusRomNo9L-Regu (n021003l.pfb) ;
/NimbusRomNo9L-ReguItal (n021023l.pfb) ;
/NimbusRomNo9L-Medi (n021004l.pfb) ;
/NimbusRomNo9L-MediItal (n021024l.pfb) ;
/StandardSymL (s050000l.pfb) ;
/URWChanceryL-MediItal (z003034l.pfb) ;
/Dingbats (d050000l.pfb) ;
多分、
Times-Roman -> NimbusRomNo9L-Regu
Times-Italic -> NimbusRomNo9L-ReguItal
Symbol -> StandardSymL
とかがあれば、論文の図をつくるのには十分。
eps中でフォント名が微妙に間違ってても
それっぽいフォントが割り当てられてるんだけど…。
なんでだろう。
# 例えば Times-Italic -> NimbusRomNo9L-Ital としても
# ちゃんとTimes系のItalicフォントが割り当てられてた…。
gnuplotの色づかい
試作品
set style line 1 lt 1 lc rgbcolor "#7b0600" lw 4 ps 2
set style line 2 lt 1 lc rgbcolor "#ca5c00" lw 4 ps 2
set style line 3 lt 1 lc rgbcolor "#c29805" lw 4 ps 2
set style line 4 lt 1 lc rgbcolor "#a2b932" lw 4 ps 2
set style line 5 lt 1 lc rgbcolor "#267e17" lw 4 ps 2
set style line 6 lt 1 lc rgbcolor "#1aafff" lw 4 ps 2
set style line 7 lt 1 lc rgbcolor "#006ffe" lw 4 ps 2
set style line 8 lt 1 lc rgbcolor "#0021d2" lw 4 ps 2
set style line 9 lt 1 lc rgbcolor "#8b2bd3" lw 4 ps 2
set style line 10 lt 1 lc rgbcolor "#545857" lw 4 ps 2
set terminal postscript eps enhanced color
set output "test10.ps"
set size 0.8,0.8
set key left top
set sample 10
set xrange [0:pi]
set yrange [-1.5:2.0]
plot \
sin(x - 0 * ((2 * pi) / 16)) ti "1" w lp ls 1, \
sin(x - 1 * ((2 * pi) / 16)) ti "2" w lp ls 2, \
sin(x - 2 * ((2 * pi) / 16)) ti "3" w lp ls 3, \
sin(x - 3 * ((2 * pi) / 16)) ti "4" w lp ls 4, \
sin(x - 4 * ((2 * pi) / 16)) ti "5" w lp ls 5, \
sin(x - 5 * ((2 * pi) / 16)) ti "6" w lp ls 6, \
sin(x - 6 * ((2 * pi) / 16)) ti "7" w lp ls 7, \
sin(x - 7 * ((2 * pi) / 16)) ti "8" w lp ls 8, \
sin(x - 8 * ((2 * pi) / 16)) ti "9" w lp ls 9, \
sin(x - 9 * ((2 * pi) / 16)) ti "10" w lp ls 10
==== line colors ====
---- 10 colors ----
#7b0600
#ca5c00
#c29805
#a2b932
#267e17
#1aafff
#006ffe
#0021d2
#8b2bd3
#545857
---- 6 colors ----
#c60300
#ff8a1b
#267e17
#006ffe
#8b2bd3
#545857
---- 7 colors ----
#ff0200
#ff8a1b
#267e17
#0021d2
#8b2bd3
#2b3230
#545857
---- 8 colors ----
#974F00
#FF2800
#FF8F00
#009800
#250097
#A800FF
#52466C
#000000
==== surface colors ====
---- 3 surfaces ----
#c1d2ff/#c1d5ff
#d2fec7
#ffe2e3
---- 2 lines ----
#ff1b1b
#004bfe
---- 3 surfaces ----
#e4eaff
#ffede4
#fffee4
---- 3 lines ----
#c40501
#008111/#206b00
#206bff
---- 2 gray lines ----
#0f0f0f
#a6a6a6/#bfbfbf
gnuplotで中抜き(白塗り)のマーク
eps出力でpoint typeを白で塗られたマークに変えたいときは、
以下をしかるべきところに追加すればOK。
# とりあえず、
## /h {rlineto rlineto rlineto gsave fill grestore} bind def
# /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
# の下ぐらいにかけばいいんじゃない?
/CircleF {
stroke [] 0 setdash
gsave LCw setrgbcolor 2 copy
hpt 0 360 arc fill
grestore
hpt 0 360 arc stroke
} def
/BoxF {
stroke [] 0 setdash
gsave LCw setrgbcolor 2 copy
exch hpt sub exch vpt add M 0 vpt2 neg V hpt2 0 V 0 vpt2 V hpt2 neg 0 V closepath fill
grestore
exch hpt sub exch vpt add M 0 vpt2 neg V hpt2 0 V 0 vpt2 V hpt2 neg 0 V closepath stroke
} def
/TriUF {
stroke [] 0 setdash
gsave LCw setrgbcolor 2 copy
vpt 1.12 mul add M hpt neg vpt -1.62 mul V hpt 2 mul 0 V hpt neg vpt 1.62 mul V closepath fill
grestore
vpt 1.12 mul add M hpt neg vpt -1.62 mul V hpt 2 mul 0 V hpt neg vpt 1.62 mul V closepath stroke
} def
/TriDF {
stroke [] 0 setdash
gsave LCw setrgbcolor 2 copy
vpt 1.12 mul sub M hpt neg vpt 1.62 mul V hpt 2 mul 0 V hpt neg vpt -1.62 mul V closepath fill
grestore
vpt 1.12 mul sub M hpt neg vpt 1.62 mul V hpt 2 mul 0 V hpt neg vpt -1.62 mul V closepath stroke
} def
/DiaF {
stroke [] 0 setdash
gsave LCw setrgbcolor 2 copy
vpt add M hpt neg vpt neg V hpt vpt neg V hpt vpt V hpt neg vpt V closepath fill
grestore
vpt add M hpt neg vpt neg V hpt vpt neg V hpt vpt V hpt neg vpt V closepath stroke
} def
/PentF {
stroke [] 0 setdash
gsave LCw setrgbcolor 2 copy
gsave translate 0 hpt M 4 {72 rotate 0 hpt L} repeat closepath fill grestore
grestore
gsave translate 0 hpt M 4 {72 rotate 0 hpt L} repeat closepath stroke grestore
} def
ちなみに、これらは
http://とうごろう.jp/wiki/%E3%81%9D%E3%81%AE%E4%BB%96/Gnuplot%E3%81%A7Keynote%E9%A2%A8%E3%81%AE%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B/
http://d.hatena.ne.jp/peccu/20100210/gnuplot
のソースのパクリ。
マークの白抜きの部分に色をつけたい場合は、
gsave LCw setrgbcolor 2 copy
のLCWを{0 0 0}や{1 1 1}といったrgb colorに置き換えればよい。
gnuplotで掛け算記号
×は{/Symbol \264}
グラフからデータの抽出
gnuplot以外の選択肢
非常に参考になるサイト
C language memo
fgets + sscanf
malloc
mpi
lapack
gcc in ubuntu
gcc a.c -lm -llapack -o a_out
icc: disable annoying remarks
To disable "remark #981: operands are evaluated in unspecified order":
icc -c main.c -O3 -Wall -wd981
shell command memo
bash/csh:標準出力と標準エラー出力
shでファイル名を取得
#!/bin/bash
path="/path/to/foo.tar.gz"
echo "path: $path"
basename=${path##*/}
echo "basename: $basename"
filename=${basename%.*}
echo "filename: $filename"
extension=${basename##*.}
echo "extension: $extension"
#!/bin/sh
echo "This script name is $0"
echo "This script name is `basename $0`"
echo "This script name is ${0##*/}"
echo "This script name is ${0#*/}"
bashで小数演算(bc使用)
a=`echo "scale=7; 133.1/4.25" | bc`
echo ${a}
整数部分の0も表示させたいなら、例えば
b=`echo "scale=4; 133.1/4.25" | bc | sed -e "s/^\./0./" | sed -e "s/^0$/0.0000/"`
echo ${b}
awkコマンドに引数を渡す方法
awkで文頭が#の行を削除
awk '$1 !~ /#/{print $0}' [filename]
#の行を表示させる場合は
awk '$1 ~ /#/{print $0}' [filename]
find+exec/find+xargs
~/work/ directoryのfileをすべてtouchする。
find ~/work/ -exec touch {} \;
より高速:
find ~/work/ | xargs touch
ファイル名にスペースがあるとき:
find ~/work/ -print0 | xargs -0 touch
wget
例えば、pdfが欲しいとき。
wget -r -l 1 -A pdf http://www.hoge/
arXiv.orgのソースの展開
tar -xvf filename.tar
rsync
io errorでも強制的に--deleteしたいときは--ignore-errorsをつける。
web, css関連
validator
画像の使用を極力控えてかっこいいCSSデザインをやってみよう大会
twitter関連
ログ保存
#!/usr/bin/perl
# 指定アカウントの全発言を取得
$user = $ARGV[0]; # アカウント
$wget = "wget"; if ( $user eq "" ) {
print "perl krmall.pl [アカウント]\n";
exit;
} # 現在のツイート数を取得
`$wget http://twitter.com/$user -Otemp.txt`;
open( FILE, "<temp.txt" );
while(<FILE>) {
if ( /<span id="update_count" class="stat_count">([0-9,]+)<\/span>/ ) {
$cnt = $1;
$cnt =~ s/,//;
break;
}
}
close( FILE ); $pmax = int($cnt/20)+1;
print "account: $user count: $cnt pages: $pmax\n"; # 指定アカウントを全て読み込み
unlink( "$user.txt" );
open( OUT, ">>$user.txt" ); for ($i=1; $i<=$pmax; $i++ ) {
`$wget http://twitter.com/$user?page=$i -Otemp.txt`;
open( FILE, "<temp.txt" );
while(<FILE>) {
if ( /<span class="entry-content">/ ) {
$text = $_;
if ( !/<\/span>/ ) {
while(<FILE>) {
if ( /<\/span>/ ) {
$text .= $_;
last;
}
$text .= $_;
}
}
$text =~ s/\n//g;
$text =~ s/\r//g;
$text =~ /<span class="entry-content">(.*)<\/span>/;
$text = $1;
<FILE>; <FILE>;
$id = <FILE>;
$id =~ /status\/([0-9]+)/;
$id = $1;
$date = <FILE>;
$date =~ /data="{time:'([^']+)'}/; #"
$date = $1;
$text =~ s/<[^>]+>//g;
print OUT "---\n";
print OUT "$id\n";
print OUT "$text\n";
print OUT "$date\n\n";
}
}
close( FILE );
}
close( OUT ); # "
# 統計表示
open( OUT, "<$user.txt");
open( ST, ">${user}_st.txt");
while(<OUT>) {
if ( /^---/ ) {
$_ = <OUT>; chomp; $id = $_;
$_ = <OUT>; chomp; $text = $_;
$_ = <OUT>; chomp; $date = $_;
$_ = $text ;
@res = /(@[A-Za-z0-9_]+)/g;
foreach $re ( @res ) {
$users{ $re } = $users{ $re } + 1;
}
}
}
close( OUT );
foreach $re ( sort {$users{$b} <=> $users{$a}} keys %users ) {
if ( $re ne "@".$user ) {
print ST "$re (".$users{$re}.")\n";
}
}
close( ST );
タイムライン関連のAPI /user_timeline
twitter ubuntu クライアント
Echofon
TwitterBar
"コメント --post"で投稿可。
twitte.rb
sudo apt-get install libglade2-ruby libgconf2-ruby libopenssl-ruby
mitter
最終更新:2013年12月31日 12:35