September 2014

TeXShopでdvipdfmxmkを使えるようにする

TeXで文章を書く際に私はTeXShopを使っているのですが,目次や参照ラベルを更新する際に手作業でコンパイルを複数回実行するのがわずらわしいと常々感じていました.タイプセットにpdflatexmkが含まれているものの,日本語のtexファイルをコンパイルするとエラーが出てコンパイルできません.どうしたものかと悩んでいたところ dvipdfmkxmk をいじれば出来るようなので,やってみました.
ちなみにMacの作業環境は OSX 10.9.4, MacTeX2014, TeXShop 3.41です.

1) 無効になっているdvipdfmxmkを有効にする.以下のコマンドでdvipdfmxmk.engineをコピーします.
$ cp ~/Library/TeXShop/Engines/Inactive/Latexmk/dvipdfmxmk.engine ~/Library/TeXShop/Engines/

2) ~/Library/TeXShop/bin/tslatexmk/dvipdfmxmkrc の latex コマンドを platex へ変更する.
# DO NOT EDIT OR COPY THIS FILE. TEXSHOP WILL AUTOMATICALLY UPDATE IT
# special latexmk settings for Herb Schulz
#$latex = 'latex --shell-escape --synctex=1 --file-line-error %O %S';
$latex = "platex $TSUserCompileOptions --synctex=1 --file-line-error %O %S";
$dvipdf = "dvipdfmx %O -o %D %S";
#$dvips = 'dvips -R0 %O -o %D %S';
#$dvips_pdf_switch = '-Poutline';
#$ps2pdf = 'ps2pdf %O %S %D';
#$ps2pdf = 'ps2pdf -dAutoRotatePages=\/None %O %S %D';

# if a bbl file is present but the generating bib file isn't available don't run bibtex. --- default in latexmk 4.13
#$bibtex_use = 1;


3) TeXShopを起動してタイプセットでdvipdfmxmkを選んで実行すれば完了です.

補足1:デフォルトのタイプセットをdvipdfmxmkにするには,タイプセットの設定画面で以下のようにすればOK.
dvipdfmxmk

補足2:なお,PDFの画像を取り込む際に行うextractbbもTeXShopで自動で実行させるには,奥村先生のTeX Wiki内の「
texmf.cnf への extractbb などの追加」が参考になります.
Comments

Xillybusを使ってLチカやってみた

自作PLをLinux上から操作するのにデバドラ書くのが大変...とこぼしていたら同僚がXillybus使ってみたらとアドバイスをくれたので,Xillybus使ってLチカをやってみました.Xillybusを使うと,/dev以下に定義されているread/writeポートを使ってLinux上から自作PLにアクセスできるため,AXI busの設定,Device Treeの変更,デバドラ等,面倒な(というかやり方がまだわかってない)作業をしなくてすむとのこと.そして幸いなことに学術目的の利用は無料.

Zedboardだと,
Xillinuxという既にXillybus組み込み済みのLinux Distributionがあるので,それを利用する.インストールはGetting Startの資料を読んでその通りにやるだけだが,Vivado 2014.2で試したら,XillybusのIPにロックがかかっているらしく,合成がうまくいかなかったので,指示通りVivado 2014.1で合成した.

やったことは3つ.
  • PSからのメッセージに従いLEDをチカらせるled_if.vをプロジェクトに追加する
  • xillydemo.vでloopbackになっている8bit幅のFIFOを2つに分け,間にled_ifを接続する.もちろん合成も.改変後のxillydemo.vはこれ
  • Xillybusを使ってLチカさせるCプログラム(led_fifo8.c)を作成する

CプログラムはZedboard上にある8個のLEDを右から順に点灯させるようにし,
さらにLEDに設定した値をフィードバックしてコンソールに表示させるようにした.
以下にled_fifo8.cを記す.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdint.h>

int main(int argc, char *argv[]) {

int fdr, fdw, i;
unsigned char t;
unsigned char p, q;

fdr = open("/dev/xillybus_read_8", O_RDONLY);
fdw = open("/dev/xillybus_write_8", O_WRONLY);

if ((fdr < 0) || (fdw < 0)) {
perror("Failed to open Xillybus device file(s)");
exit(-1);
}

for (i = 0; i < 8; i++)
{
t = 1 << i;
write(fdw, &t, sizeof(t)+1);
read(fdr, &p, sizeof(p));
read(fdr, &q, sizeof(q));
printf("Send: 0x%02x Retn: 0x%02x 0x%02x\n", t, p, q);
sleep(1);
}

close(fdr);
close(fdw);

return 0;
}

次にコンパイルだが,'-static'オプションなしだと実行できなかったので,以下の様に静的リンクで行った.
$ arm-xilinx-linux-gnueabi-gcc led_fifo8.c -o test -static


以下がZedboard上で動いているXillinuxでの実行結果である.
root@localhost:~# ./test 
Send: 0x01 Retn: 0x00 0x01
Send: 0x02 Retn: 0x04 0x02
Send: 0x04 Retn: 0x04 0x04
Send: 0x08 Retn: 0x04 0x08
Send: 0x10 Retn: 0x04 0x10
Send: 0x20 Retn: 0x04 0x20
Send: 0x40 Retn: 0x04 0x40
Send: 0x80 Retn: 0x04 0x80

ご覧の通り,フィードバック時にx00と0x04が混入されてしまっている(読み出しの変数を2個にしているのはそのため).
私がxillydemo.vに加えたFIFOを操作するインタフェースの記述がおかしいのか,
はたまたLinuxでは0x04(ASCIIのEOT)がテキストの最後に付加されてしまうからか,
理由はまだわかっていないので,有識者にコメントを頂けたらと思っています.
Comments