「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:2
昨日:0
総数:2405
現在:7


設定していないはずの文字スタイル

ページOpenOffice.org FAQの登録ページ
投稿者kolona
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2008-05-02 01:45:30 (金)
OSWindows XP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

はじめまして。kolonaと申します。 OOoWriterのスタイルについて質問があります。 私のつくっているodtのファイルに13種類の文字スタイルを適用しているのですが、どうもおかしなところがあります。
同じスタイルを適用している一文に、時々別のスタイルが挟まっているようなのです。
例えば、「自分より低い濃度を持った液体、即ち自分より浸透圧が低い液体」という一文は"標準文字"というユーザー定義スタイルを適用しています。しかし、この一文を全部選択すると、「スタイルと書式ツールバー」に"標準文字"と表示されず、複数のスタイルを選択したときと同様に"標準"スタイルが表示されます。おかしいと思い、この部分を詳しく調べて見ると、どうも、「液体、即ち」の間の "、"の後に別のスタイルが適用されているらしいのです。でも、一つ一つの文字は"標準文字"がきちんと適用されており、漏れはありません。
問題なのは、このスタイルの切れ目に新たに文を挿入すると、スタイルが勝手に"標準"スタイルに切り替わってしまい、気づかないことです。以前にスタイルがいかれて70ページ余りを手作業で検査しましたが、どうもコレが原因のようで、このままにはしておけません。
そこで、このファイルをzipファイルとして解凍し、"content.xml"を見てみると、

<text:span text:style-name="標準文字">

<text:span text:style-name="T10">自分より低い濃度を持った液体、</text:span></text:span>

<text:span text:style-name="標準文字">

<text:span text:style-name="T10">即ち自分より浸透圧が低い液体</text:span></text:span>

のように記録されていました。この、"標準文字"のあとに適用されている"T10"というスタイルは私はまったく設定しておらず、「スタイルと書式ツールバー」にも表示されていません。この"T10"というスタイルは、"標準文字"のあとに2236箇所も挿入されており、まったくの無駄です。このスタイルはたいていの場合、文字スタイルを切り替えた後に入っていますが、同一スタイルの間に入っているだけの場合もあり、わけがわかりません。同一環境で新規に作ったファイルではこういった現象は見られません。おまけによく調べてみると、XMLファイルの最初の方にT1〜T46という恐るべき数のスタイルが勝手に設定されています。T10以外はほとんど使われていませんが、どうも自動生成された感じです。このファイルはOpenOffice.orgがver2.3になったときにスタイルが逝かれてすべて適用しなおしたことがあります。もしかしたらそのときにいかれたのかもしれませんが、そのときのファイルが見つかりません。

ここで聞きたいのは、次の3点です。
1. なぜ、勝手に挿入されるのか。ファイルが壊れているのか?
2. このスタイルを削除する方法はあるだろうか?
3. どうしても直せないなら新規にファイルを作りたいが、ファイルの編集時間などを引き継ぐ方法はあるか?

かなり長いこと編集し続けているので、編集履歴に愛着がわいてしまいました。できれば全て初期化などはしたくありません。
現在試そうか迷っている解決方法として、マクロでスタイルを検索し、該当のスタイルを消去する方法です。でも、writerのマクロは書いたことないので、ちょっと苦労しそうです。
どなたか、情報をいただけないでしょうか。よろしくお願いします。

環境: WindowsXP 現在のOpenOffice.orgバージョンは2.4.0。(最初にファイルを作成したときのバージョンは多分2.1。)

ファイルのプロパティ:
ページ数:85P
文字数:87829文字
語句数:42726
改訂番号:1869
合計編集時間:433:23:37

ファイルの歴史:OpenOffice.org 2.1 のころから編集してます。2.2か2.3にヴァージョンアップしたときに、スタイルがいかれて、全てスタイルを適用しなおしています。これまでのバージョンアップは全て適用しています。


調べてみました

M.Kamataki (2008-05-02 10:33:10 (金))

"T10"で探して見つからず、"T1"でそれらしき情報を見つけました。以下のページはどうでしょうか。なお、T1、T10などのスタイルはフォントを変える際に自動的に作成されるスタイルのようです。なお、以下のページを公開されている方はODFの規格書の翻訳もされています。

探検 XMLボキャブラリの世界:
http://www.jagat.or.jp/sgml/pc/voc16.htm

つまり「標準文字」というユーザー定義スタイルにはフォント寸法の違うものがいくつかあるのではないでしょうか。

あと

M.Kamataki (2008-05-02 10:39:45 (金))

Opening Open Formats with XSLT:
http://www.xml.com/pub/a/2004/02/04/tr-xml.html

ここを見ると変更は寸法だけではないようですね。つまり書体のなんらかの変更時には新しい番号のスタイルが作成されるようです。

文字スタイルが標準になる

M.Kamataki (2008-05-02 10:56:34 (金))

さて文字スタイル「標準文字」に異なる書体の変化があった場合、それらを同時に選択すると「標準文字」ではなく「標準」と表示されました。

このことから、書体を変更する場合はあらかじめ新しい文字スタイルを用意し、文字スタイル適用で変更したほうがトラブルは避けられると思いますが、どうでしょうか。

どうするか

M.Kamataki (2008-05-02 11:06:54 (金))

なんとくいじらないほうが良いような気がします。

T10というのが一番使われているのでしょうが、T10を残して果たして他のスタイルを削除してよいものか、わかりません。また、最初に作成した文字スタイルが無印なのかT1なのか、自信がないです。

他にアイデアのある方はいらっしゃいますでしょうか。

ためしに、削除してみてはどうでしょうか。

amano (2008-05-02 17:16:48 (金))

perlならこんな感じでいいのかな?
改行には気を付けて下さい。
簡単な文では動いていますが...
うまくいくかは解りません。

 $head = '<text:span text:style-name="T10">';
 $tail = '</text:span>';
 while(<>){
   $_ =~ s/$head(.*?)$tail/$1/g;
   print $_;
 }

関連するIssue

M.Kamataki (2008-05-03 13:37:41 (土))

IssueTrackerにも同様の報告がありました。きっかけは異なりますが、趣旨は同じではないでしょうか。ただし、「修正しない」としてクローズされています。

"Strange behavior with text:span tags in text imported from RTF"
http://ja.openoffice.org/issues/show_bug.cgi?id=75181

mruさんのコメントに注目してください。「文字スタイルは、フォントリストボックスなどから書体を変えると整合性がなくなる(overrule)」「"デフォルトの書式設定(Format.Default formatting)"を適用するか Ctrl+Shift+Space で属性を取り除いてください」という趣旨のようです。

編集時間などを引き継ぐ方法

M.Kamataki (2008-05-03 13:46:20 (土))

まず、オリジナルファイルは残しておきます。コピーを2つ作成し、1つの目のコピーで修正(amanoさんの方法、手動で直すなど)、2つ目のコピーでは全内容を削除し、そこに1つ目の修正後のファイルを挿入。確認後、オリジナルファイルを削除します。これで編集時間は引き継がれるのではないでしょうか。

現在取り組み中の対策

kolona (2008-05-04 08:13:21 (日))

たくさんの情報ありがとうございます。

>>つまり「標準文字」というユーザー定義スタイルにはフォント寸法の違うものがいくつかあるのではないでしょうか。
どうやらそのようです。どうも、スタイルを指定する前に直接フォントを変更した文字があるようです。


>書体を変更する場合はあらかじめ新しい文字スタイルを用意し、文字スタイル適用で変更したほうがトラブルは避けられると思いますが、どうでしょうか。
今度から心がけます。問題のファイルは、私がスタイルというものの便利さに気づく前にいろいろ作ってしまったので、スタイルに関して問題があるようです。

>perlならこんな感じでいいのかな?
正規表現を参考に、秀丸でやってみました。書き換えたcontent.xmlを含めてzip圧縮すると、問題のスタイルがなくなりました。でも、いくつか変換しきれない場所がみつかり、対策を検討中です。

>まず、オリジナルファイルは残しておきます。コピーを2つ作成し、1つの目のコピーで修正(amanoさんの方法、手動で直すなど)、2つ目のコピーでは全内容を削除し、そこに1つ目の修正後のファイルを挿入。確認後、オリジナルファイルを削除します。これで編集時間は引き継がれるのではないでしょうか。
現在手作業で進行中です。やってみたところ、編集時間はmeta.xmlに記録されていたので、コレを引き継ぐと良いみたいです。まだ不整合がないかは未確認ですが。


新しいHDをサルベージしたら昔のファイルが見つかりました。問題は10月以降のようで、ここからスタイルに問題が生じています。バージョンアップ時にスタイルの不整合があったのではないかと推測しています。


M.Kamataki様、amano様、貴重なご意見ありがとうございます。現在いろいろ試しているので、うまくいったらその方法をこちらに書き込みます。

最終的な対策

kolona (2011-03-31 12:07:55 (木))

すいません。ずいぶん前に解決して、下の文章を下書きしていたのですが、投稿した気になっていたようで、この質問を締めていませんでした。
OOoもver3に突入し、LibreOfficeなどの派生も出ている中、もう役に立たないかもしれませんが、解決はしていますので、投稿し、質問を完結したいと思います。

結局、最初から作り直すことになりました。その際に"meta.xml"から必要な情報を抜き出して新しいファイルの"meta.xml"に書き込むことで、ファイル履歴などは引き継ぐことができました。今は図の挿入や文字スタイルの適用に追われています。新規に設定しなおしたので、文字スタイルの命名規則も統一し、文字スタイルの親子関係も効率的なものにできたので、満足しています。

調べてみた結果を報告します。

1. 新しく作ったファイルについて
1.1 全ての文字にユーザー定義スタイルを設定した新ファイルでも、文字を書き込むと新しい部分に<text:span text:style-name="T1">のスタイルがこっそり適用される。

1.2 T1というスタイルは、

<style:style style:name="T1" style:family="text">

<style:text-properties style:language-asian="ja" style:country-asian="JP"/>

</style:style>
のように定義されており、実害はないように見える。また、その部分を選択しても複数の文字スタイルを選択したことにはならない場合もあった。でも、やっぱりスタイルの境界部分を選択した場合に複数の文字スタイルを選択したことになる。


"T1"が間に入っていない場合に"標準文字"スタイルをまとめて適用すると、細切れに設定されていた文字スタイルが一気に適用される。例えばこんな感じ。

<text:p text:style-name="P3">

<text:span text:style-name="標準文字"><text:s text:c="2"/>酵素が作用する物質を基質といい、</text:span>

<text:span text:style-name="標準文字">特定の</text:span>

<text:span text:style-name="標準文字">酵素は</text:span>

<text:span text:style-name="標準文字">特定の</text:span>

<text:span text:style-name="標準文字">基質にしか作用しない。</text:span>

</text:p>

これが

<text:p text:style-name="P3">

<text:span text:style-name="標準文字">酵素が作用する物質を基質といい、特定の酵素は特定の基質にしか作用しない。</text:span>

</text:p>
こうなる。

しかし、<text:span text:style-name="T1">がはいってくると話が違ってくる。下のxml文は「酵素は」という文字列を後から挿入した場合である。このとき、新しく挿入された「酵素は」文には"標準文字"スタイル以外に"T1"のスタイルが局所的に適用される。

<text:p text:style-name="P3">

<text:span text:style-name="標準文字"><text:s text:c="2"/>酵素が作用する物質を基質といい、</text:span>

<text:span text:style-name="標準文字">特定の</text:span>

<text:span text:style-name="標準文字"><text:span text:style-name="T1">酵素は</text:span></text:span>

<text:span text:style-name="標準文字">特定の</text:span>

<text:span text:style-name="標準文字">基質にしか作用しない。</text:span>

</text:p>
この時、見た目には普通に見える「酵素が作用する物質を基質といい、特定の酵素は特定の基質にしか作用しない。」という一文に"標準文字"スタイルを適用しても、この文はスタイルを統一できない。さらに悪いことに、問題となっている「酵素は」文字列の直後に改行を入れると、"標準文字"スタイルが解除され、"標準文字"スタイルで文字色を変更しても、以降の文に変更が反映されない。


2. 問題となった古いファイルについて
2.1 昔のディスクをサルベージすると、古いファイルが見つかった。コレを見ると、T10というスタイルが適用され始めたのは2.3へのアップデート後であった。このT10には設定していた文字スタイルを"標準"にもどしてしまうという実害があった。さらになぜかこのファイルのT10という文字スタイルは、まとめて標準文字スタイルを適用しても修正されず、xmlファイルの直接編集でしか修正できなかった。

2.2 正規表現でT[0-9]{1,}という名称の文字スタイルをまとめて削除してもファイルは壊れない。しかし、何箇所かの文字スタイルが標準文字に戻ってしまった。文字スタイルが標準文字に戻ってしまったのは、ユーザー定義文字スタイルの設定に上書きをした部分であった。この修正には、@@@@@@@@@@さんの教えてくださった正規表現をちょっとだけ変えた
(<text:span text:style-name="T[0-9]{1,}">)(.*?)(</text:span>)
を使わせていただきました。

こんな感じです。ひとまず解決したのでコレで閉めようかと思います。
新しくわかったことがあったらまた書き込むかもしれません。
たくさんのアドバイス、ありがとうございました。

お名前:
題名: