Kodama's home / tips.
latex2html で LaTeX マクロを処理するには, 以下のような方法が考えられます.
以下では次のマクロの例を用いて概説します. これは "\sampl{文字列}" のように使うと "(文字列)" のように () で括ってくれます.
\def\sampl#1{(#1)}
%% sample.tex \documentclass{article} \def\sampl#1{(#1)} \begin{document} \sampl{マクロ例} \end{document}
%% my-style.tex の内容 \def\sampl#1{(#1)}%% sample.tex \documentclass{article} \makeatletter \input{my-style} %% マクロを読み込む \makeatother \begin{document} \sampl{マクロ例} \end{document}latex2html sample のように実行すると, latex2html は my-style.tex を読み込んで LaTeXマクロを処理してくれます.注
下のように, マクロ名の "先頭文字が @" の場合には, latex2html は "Arguments to @ are too complex" のメッセ−ジを出して マクロの処理を止めてしまいます.%% my-style.tex の内容 \def\@sampl#1{[#1]} \def\sampl#1{\@sampl{#1}}次のように, 先頭に適当な詰物をすると latex2html で問題なく処理できます.
%% my-style.tex の内容 \def\x@sampl#1{[#1]} \def\sampl#1{\x@sampl{#1}}自作スタイルを Perl 処理させる方法
マクロを書き込んだファイルは通常 my-style.sty のような名にして つぎのように使います.%% my-style.sty の内容 \def\sampl#1{(#1)}%% sample.tex の内容 \documentclass{article} \usepackage{my-style} \begin{document} \sampl{マクロ例} \end{document}このとき latex2html は 対応する名の Perl スクリプトファイル my-style.perl を読み込んで(my-style.sty は読みません)マクロを処理します. ですから, LaTeX マクロに対応する Perlの処理をこの中で記述しなければなりません. 対応する Perl スクリプトとして何を記述すると良いのでしょうか.
まず, この perl スクリプトを読み込ませるために, .latex2html_init の中に以下のように読み込みスタイル名を書き込みます.
## .latex2html_init の内容 $DO_INCLUDE="my-style"; 1;次に Perl スクリプト "my-style.perl" を作成します. ファイル名はスタイルファイルと名を統一して my-style.perl の様なファイル名とします. Perl スクリプトの具体的な処理としては, 大きく分けると2通りに分かれます.
- LaTeX に渡して画像化する方法 : LaTeX に引き渡して結果を画像として張り込むように latex2html に指示する.
- HTML を書き出す方法 : Perl で対応する HTML を書き出すようなスクリプトを書く.
LaTeX に渡して画像化する方法
次のように my-style.perl スクリプト内で process_commands_inline_in_tex 等を使うと LaTeX で処理した画像として結果が張りこまれます.## my-style.perl の内容 &process_commands_inline_in_tex("sampl # {}\n");HTML を書き出す方法
次のように "sub do_cmd_マクロ名{....}" でマクロを処理するperl関数を書くと, perl で HTML を作成させる事ができます.## my-style.perl の内容 sub do_cmd_sampl{ local($_)=@_; s/$next_pair_pr_rx//o; local($key)=&translate_commands($2); '('.$key.')'.$_; }例
LaTeXコメントマクロ に紹介するコメント化マクロに対応するperl スクリプトを紹介します. 以下では, このスタイル中で定義している, incomment と excomment を処理する関数 do_cmd_incomment と do_cmd_excomment を定義しています.# comment-k.perl : perl style for LaTeX2HTML # 2002.01.03 Kouji KODAMA sub do_cmd_xincomment{ local($_)=@_; s/$next_pair_pr_rx//o; local($key)=&translate_commands($2); $key.$_; } sub do_cmd_xexcomment{ local($_)=@_; s/$next_pair_pr_rx//o; $_; } sub do_cmd_incomment{ local($_)=@_; local($cmd, $code); s/$next_pair_pr_rx//o; local($key) = &translate_commands($2); $cmd="do_cmd_$key"; $code = "undef \&$cmd"; eval($code) if (defined &$cmd); $code = "sub $cmd\{ \&do_cmd_xincomment(\@\_);\}"; eval($code); $_ ; } sub do_cmd_excomment{ local($_)=@_; local($cmd, $code); s/$next_pair_pr_rx//o; local($key) = &translate_commands($2); $cmd="do_cmd_$key"; $code = "undef \&$cmd"; eval($code) if (defined &$cmd); $code = "sub $cmd\{ \&do_cmd_xexcomment(\@\_);\}"; eval($code); $_ ; } 1; # last line
Kodama's home / tips.