既知の質問でしたら申し訳けありません.
下記のLaTeXファイル(foo.tex)において
1) platex foo.tex
2) platex foo.tex
3) dvips foo.dvi
4) convbkmk -s foo.ps
5) ps2pdf foo-convbkmk.ps foo.pdf
と操作して,得られた foo.pdf のプロパティを見ると
添付の「property.png」のように日本語の文字化けが
ありました.対処方法よろしくお願いします.
==========================
%foo.tex
%encoding:sjis
\documentclass{jsarticle}
\usepackage{hyperref}
\hypersetup{%
bookmarksnumbered=true,%
bookmarkstype=toc,%
colorlinks=true,%
pdftitle={文芸作品},%
pdfsubject={吾輩は猫である,他},%
pdfauthor={進撃の巨人},%
pdfkeywords={TeX,PostScript,夏目漱石}}
\begin{document}
\section{文芸作品について}
\subsection{吾輩は猫である}
吾輩は猫である.名前はまだ無い.
\subsection{草枕}
山路を登りながら,こう考えた.
\end{document}
==========================
64-bit バイナリの bkmk2uni で処理しようとすると bkmk2uni の動作が停止します.
bkmk2uni.c の qsort を使用する箇所で qsort の第3引数に固定値の 4 を渡していますが
p はポインタの配列なので正しくはポインタのサイズを渡さないといけないと思います.
32-bit Windows ではポインタのサイズは 4-byte ですが
64-bit Windows ではポインタのサイズは 8-byte になります.
以下のように修正したところ動作するようになりました.
$ diff -urN bkmk2uni.c bkmk2unifix.c
--- bkmk2uni.c 2014-02-27 15:22:46 +0900
+++ bkmk2unifix.c 2014-02-27 15:29:01 +0900
@@ -1787,7 +1787,7 @@
}
}
else { /* some p[i] non null */
- qsort((unsigned char **)&p, (size_t)NOFSTR, (size_t)4, cmp);
+ qsort((unsigned char **)&p, (size_t)NOFSTR, sizeof(unsigned char *), cmp);
q = b_in;
while(*q == ' ') q++;
if(inproc == 0) {
バイナリ セクションがあるとき,ファイル入出力の場合は問題ありませんが,
フィルタの場合,Windows では出力が壊れるようです。
Unix では問題ないはずです。
Windows では以下のパッチで壊れないようになりました。
--- convbkmk.rb.orig Mon Mar 03 18:16:40 2014
+++ convbkmk.rb Mon Mar 03 18:14:08 2014
@@ -489,8 +489,8 @@
### main
if ARGV.size == 0
- ifile = STDIN
- ofile = STDOUT
+ ifile = STDIN.binmode
+ ofile = STDOUT.binmode
file_treatment(ifile, ofile, enc)
else
ARGV.each {|fin|
フィルタの場合,Windows では出力が壊れるようです。
Unix では問題ないはずです。
Windows では以下のパッチで壊れないようになりました。
--- convbkmk.rb.orig Mon Mar 03 18:16:40 2014
+++ convbkmk.rb Mon Mar 03 18:14:08 2014
@@ -489,8 +489,8 @@
### main
if ARGV.size == 0
- ifile = STDIN
- ofile = STDOUT
+ ifile = STDIN.binmode
+ ofile = STDOUT.binmode
file_treatment(ifile, ofile, enc)
else
ARGV.each {|fin|