Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード Twitter

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2010-12-16

[][][][]合成フォントの名前を変更する

合成フォントは英語版にはない機能です。和欧混植があたりまえの日本語特有の機能といっても差し支えありません。そのためかどうかわかりませんが、InDesignの登場当初から鬼門のように不具合の多い機能であると思います。

合成フォント機能をより安全に使うためには、英数字とハイフンのみで命名すべきです。Fontographerなどでフォントを作成された経験がある方は、フォントの命名規則がけっこう神経質であるのをご承知かもしれません。内部的にフォントとして処理されるわけですから、その関連性は容易に想像できます。

やや古い記事になりますが、「見つからないフォント」とは?の中でAdobeのナット・マッカリーさんが非ローマ字による命名がトラブルの一因ではないかと示唆されています。

ぼく自身、なんどかトラブルに遭い使用する名前を変更することで回避した経験則がありました。「名前を変更」といっても、実際に合成フォント名はInDesignでは変更できません。新規合成フォントを作ってセットを複製して、現在使われている古い合成フォントをすべて置き換えなくちゃいけません。もうちょっとラクできんものか、と。IDMLで変えちゃえばいいじゃん。という実験です。実験なので、以下自己責任で試してみてください。


1)用意したドキュメントには「fuga-seuzo」と「hoge-seuzo」という2つの合成フォントを作成しました。

f:id:seuzo:20101216154912p:image


2)IDMLに書出し、伸長しました。

f:id:seuzo:20101216154913p:image


3)まず、「META-INF」フォルダの中の「metadata.xml」を編集します。それぞれのリソースがリストされるのがわかります。該当のフォント名を書き換えます。

               <rdf:li rdf:parseType="Resource">
                  <stFnt:fontName>hoge-seuzo</stFnt:fontName>
                  <stFnt:fontFamily>hoge-seuzo</stFnt:fontFamily>
                  <stFnt:fontFace/>
                  <stFnt:fontType>ATC</stFnt:fontType>
                  <stFnt:versionString>hoge-seuzo</stFnt:versionString>
                  <stFnt:composite>true</stFnt:composite>
                  <stFnt:fontFileName>hoge-seuzo</stFnt:fontFileName>
                  <stFnt:childFontFiles>
                     <rdf:Seq>
                        <rdf:li>A-OTF-GothicBBBPro-Medium.otf</rdf:li>
                        <rdf:li>A-OTF-RyuminPro-Regular.otf</rdf:li>
                        <rdf:li>UniversLTStd.otf</rdf:li>
                     </rdf:Seq>
                  </stFnt:childFontFiles>
               </rdf:li>

「metadata.xml」の中の「fuga-seuzo」と「hoge-seuzo」を、それぞれ「fuga-ichikawa」と「hoge-ichikawa」置き換えて保存します。


4)フォント定義のためのリソースを編集します。「Resources」フォルダの「Fonts.xml」を編集します。

検索するとわかりますが、名前参照部分は「FontFamily」要素で宣言されています。

	</FontFamily>
	<FontFamily Self="di128" Name="">
		<Font Self="di128Fontnfuga-seuzo" FontFamily="fuga-seuzo" Name="fuga-seuzo Regular" PostScriptName="ATC-*fuga-seuzo" Status="Installed" FontStyleName="" FontType="ATC" WritingScript="1" FullName="fuga-seuzo" FullNameNative="fuga-seuzo" FontStyleNameNative="" PlatformName="$ID/" Version=""/>
	</FontFamily>
	<FontFamily Self="di141" Name="hoge-seuzo">
		<Font Self="di141Fontnhoge-seuzo" FontFamily="hoge-seuzo" Name="hoge-seuzo Regular" PostScriptName="ATC-*hoge-seuzo" Status="Installed" FontStyleName="" FontType="ATC" WritingScript="1" FullName="hoge-seuzo" FullNameNative="hoge-seuzo" FontStyleNameNative="" PlatformName="$ID/" Version=""/>
	</FontFamily>

さらに「CompositeFont」要素の属性でフォント参照され、「CompositeFontEntry」要素内に各々の設定値があります。

	<CompositeFont Self="CompositeFont/hoge-seuzo" Name="hoge-seuzo">
		<CompositeFontEntry Self="u110" Name="$ID/Kanji" FontStyle="Medium" RelativeSize="100" HorizontalScale="100" VerticalScale="100" Locked="true" ScaleOption="true" BaselineShift="0">
			<Properties>
				<AppliedFont type="string">A-OTF 中ゴシックBBB Pro</AppliedFont>
			</Properties>
		</CompositeFontEntry>
...(以下略)

「Fonts.xml」の中の「fuga-seuzo」と「hoge-seuzo」を、それぞれ「fuga-ichikawa」と「hoge-ichikawa」置き換えて保存します。


5)段落スタイルと文字スタイルで使われているフォントを変更するために、「Resources」フォルダの「Styles.xml」を編集します。

たとえば段落スタイル「01スタイルfuga」は「ParagraphStyle」要素の中にこのようになっています。「AppliedFont」要素でフォント名で参照されています。

		<ParagraphStyle Self="ParagraphStyle/01スタイルfuga" Name="01スタイルfuga" Imported="false" NextStyle="ParagraphStyle/01スタイルfuga" KeyboardShortcut="0 0" PointSize="9" Composer="HL Single J" OTFContextualAlternate="false" Rensuuji="false" TreatIdeographicSpaceAsSpace="true">
			<Properties>
				<BasedOn type="string">$ID/[No paragraph style]</BasedOn>
				<PreviewColor type="enumeration">Nothing</PreviewColor>
				<AppliedFont type="object">CompositeFont/fuga-seuzo</AppliedFont>
				<Mojikumi type="object">MojikumiTable/honbun-yoko</Mojikumi>
				<KinsokuSet type="object">KinsokuTable/kinsoku</KinsokuSet>
			</Properties>
		</ParagraphStyle>

同様に文字スタイルはこうなっています。

		<CharacterStyle Self="CharacterStyle/12-文字スタイルfuga" Imported="false" KeyboardShortcut="0 0" Name="12-文字スタイルfuga" FontStyle="">
			<Properties>
				<BasedOn type="string">$ID/[No character style]</BasedOn>
				<PreviewColor type="enumeration">Nothing</PreviewColor>
				<AppliedFont type="string">fuga-seuzo</AppliedFont>
			</Properties>
		</CharacterStyle>

該当部分をすべて書き換えて保存します。


6)文中で唐突にフォント指定してある(段落スタイルや文字スタイルになっていない)場合は、「Stories」フォルダの中のそれぞれのストーリー(ファイル)の中で「CharacterStyleRange」の「AppliedFont」が指定されています。

			<CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" PointSize="9" OTFContextualAlternate="false">
				<Properties>
					<AppliedFont type="object">CompositeFont/fuga-seuzo</AppliedFont>
				</Properties>
				<Content>唐突</Content>
			</CharacterStyleRange>

該当部分を書き換えて保存します。


7)IDMLに戻します。これを使うとフォルダをドラッグ&ドロップするだけですから簡単ですよ。

Drag and Drop AppleScripts for EPUB, IDML, etc. | InDesignSecrets

f:id:seuzo:20101216154914p:image


8)InDesignで開きます。書き換わっているのがわかります。

f:id:seuzo:20101216154915p:image


実験に使用したドキュメントをダウンロードできます。

2010-12-17.zip 直


ちなみに

IDMS(スニペット)だと伸長の必要もなく、完全な名前参照なので、より書き換えが容易です。各要素名もIDMLに準じています。異なるドキュメントでオブジェクトをコピペした時に「あ、合成フォント入ってるじゃん」とがっかりしなくて済みます。ただし、それに気がつくのはたいていコピーした後なんですが...orz


参照

5節フォント/IDMLWiki/ja

[InDesign]合成フォント名で使用不可な文字 | diary NET. 1.2mg

[InDesign]合成フォントで使用不可な文字についてもう少し調べてみた | diary NET. 1.2mg