名前: misc 日時: 2004-03-02 23:45:13 IPアドレス: 211.4.121.*
>>26671 >45 の後ろの半角スペースは、どのような意味を持つのでしょうか? それは,“数値の終端”を表すための空白です. \DeclareFontFamily の第 3 引数は,LaTeX のデフォルトでは 下に引用する \extract@font の定義中の \csname \f@encoding+\f@family\endcsname の箇所でしか用いられていません. # この \csname \f@encoding+\f@family\endcsname が, # \DeclareFontFamily によって定義されます. ここで,その次にある \csname\curr@fontshape\endcsname (\DeclareFontShape の第 6 引数が現れます)はたいていの場合 空文字列であること,および \extract@font の末尾に \relax が 置かれていること,の 2点の理由により, \hyphenchar\font45 # \font が要ります. の直後の空白文字を欠いても問題ないことが多いのですが, 空白文字を入れておくのが無難です. # plain TeX における \langle の定義 # \def\langle{\delimiter"426830A } # において,数値の後に空白文字を(故意に)置いているのと # 同じ理由によります. \def\extract@font{% \get@external@font \global\expandafter\font\font@name\external@font\relax \font@name \relax \csname \f@encoding+\f@family\endcsname \csname\curr@fontshape\endcsname \relax} >\usepackage[T1]{fontenc} とした場合は、どのようにしたらよいでしょうか? この場合でも,タイプライタ体に対するファミリー名は cmtt(ectt ではなく) ですから, \DeclareFontFamily{T1}{cmtt}{\hyphenchar\font=45 } となります. ただし,これだけを記述してしまうと, “T1 エンコーディングの cmtt ファミリー”の宣言はなされているのに そのファミリーに属する個々の書体のフォント定義はなされていない,という 妙なことになります. # OT1 エンコーディングの場合には,fonttext.ltx によってすでに # ot1cmtt.fd を読み込んでいるので,この問題は生じません. そこで,あらかじめ t1cmtt.fd を読み込んでから, 上記の \DeclareFontFamily の記述を行って \t1+cmtt を 再定義すればよいわけです. 具体的には,次のようになります. \documentclass{article} \usepackage[T1]{fontenc} \makeatletter% ←これが要る理由は,ファイル t1cmtt.fd を読めば自明です. \input{t1cmtt.fd} \makeatother \DeclareFontFamily{T1}{cmtt}{\hyphenchar\font45 } \textwidth=100pt \begin{document} \ttfamily This is a meaningless sample text. This is a meaningless sample text. This is a meaningless sample text. This is a meaningless sample text. This is a meaningless sample text. This is a meaningless sample text. \end{document} # 一応説明してはみましたが…
この書き込みへの返事: