名前: ZR 日時: 2007-01-27 20:21:05 IPアドレス: 59.140.98.*
>>46686 >>46683 奥村先生の >>46679 に私が手を入れた結果を載せます。 変更点は以下の通り: 1. エンコーディング判定を \verb, \verbatim 中で行うことで、 現在有効のエンコーディングに合うようにする 2. エンコーディングが T1, OT1 以外の場合の副作用をなくす。 3. T1 が宣言されていて TS1 がされてない時の簡単な対処。 テストはわざと OT1 と T1 が混在する状況で行っています。 (普通は混在は起こらないでしょうが、不注意では起こりえます。) 2. について: 実は \verb(atim) 中にある \@noligs は ` と ' の \catcode を \active にしてマクロ定義しています。これは ?` や !` のリガチャ を回避するための処理ですが、` や ' を単なる \char に再定義 するとこの処理が無効になってしまいます。従って、\verbh@@@k 自体が実行されないようにする必要があります。 未解決の点: - T1 のフォントに対応する TS1 のフォントがなかったり、あるいは TS1 フォントの中に quotesingle がなかったら? - T1, OT1 以外の場合の妥当な処理は? \documentclass[a4paper]{article} \usepackage[T1,OT1]{fontenc} \usepackage{txfonts} % txfonts にしたがなぜかエンコーディング \usepackage{okuverb} % は OT1 のまま... %----------------------------------------------------------- \makeatletter %% okuverb.sty 変更分 \def\@OTone{OT1} \def\@Tone{T1} \AtBeginDocument{% % T1 が宣言済で TS1 がなければ... \expandafter\ifx\csname T@T1\endcsname\relax \else \expandafter\ifx\csname T@TS1\endcsname\relax \input{ts1enc.def}% % textcomp は副作用があるので \fi\fi % これで済ます。ちなみに **enc.def } % の多重読込は OK らしい... \begingroup \catcode`\'=13 \catcode`\`=13 \gdef\verbh@@@k{\catcode39=13 \let'=\@rq \catcode96=13 \let`=\@lq} \endgroup \def\verbh@@@k@{% \ifx\f@encoding\@OTone \chardef\@lq=18 \chardef\@rq=13 \verbh@@@k \else \ifx\f@encoding\@Tone \chardef\@lq=0 % \DeclareTextSymbolDefault が行われていないので... \def\@rq{{\fontencoding{TS1}\selectfont\textquotesingle}}% \def\y@n{{\fontencoding{TS1}\selectfont\textyen}}% \verbh@@@k \fi % T1, OT1 でない場合は \verbh@@@k を行わない \fi } \def\verb{% \leavevmode\hbox % 変更 \bgroup \verb@eol@error \let\do\@makeother \dospecials \verbatim@font\@noligs \noautoxspacing % 追加 \verbh@@k \verbh@@@k@ % 追加 %<-- ZR:変更! \@ifstar\@sverb\@verb} \def\@verbatim{% \trivlist \item\relax \if@minipage \verbatimsize \else \vskip\baselineskip \vskip-\f@size pt \verbatimsize \vskip-\baselineskip \vskip\f@size pt \vskip\parskip \fi \leftskip\@totalleftmargin \if@minipage \else \advance \leftskip \verbatimleftmargin \fi \rightskip\z@skip \parindent\z@ \parfillskip\@flushglue \parskip\z@skip \@@par \@tempswafalse \def\par{% \if@tempswa \leavevmode \null \@@par\penalty\interlinepenalty \else \@tempswatrue \ifhmode\@@par\penalty\interlinepenalty\fi \fi}% \let\do\@makeother \dospecials \obeylines \verbatim@font \noautoxspacing \@noligs \verbh@@k \verbh@@@k@ %<-- ZR:変更! \hyphenchar\font\m@ne \everypar \expandafter{\the\everypar \unpenalty}% } \makeatother %----------------------------------------------------------- \begin{document} Sample: % ここで T1/lmr を指定、\ttfamily は T1/txtt になってしまう \begin{quote}\usefont{T1}{lmr}{m}{n} It's a \verb+`computer quote'+! \end{quote} \end{document}
この書き込みへの返事: