Невозможно изменить шрифт рубинового текста с помощью кодов полей

Я запускаю приведенный ниже код макроса, который способен одновременно добавлять фонетический пиньинь ко всему выделенному китайскому тексту. Однако этот код может добавлять рубиновый текст только с использованием настроек шрифта по умолчанию, и мне нужно изменить шрифт, положение и размер шрифта пиньинь.

https://github.com/wuzhuoqing/alltextphonetic/blob/master/alltext.bas

Сначала я попытался переключить коды полей, чтобы изменить настройки, и это сработало. Однако, когда я сохранил, вышел и снова открыл его, изменились только позиционирование и размер шрифта, шрифт был таким же, прежде чем я внес изменения с помощью кодов полей.

Например, исходный шрифт рубинового текста — Times New Roman. Я изменю его на «DengXian», переключив коды полей. Затем шрифт рубинового текста будет изменен. Однако, как только я сохраняю и снова открываю документ, шрифт рубинового текста возвращается к «Times New Roman» вместо «DengXian».

Есть ли какие-то решения? Или можно ли внести изменения в код макроса, чтобы он мог отказаться от настроек по умолчанию для рубинового текста и принять мои собственные? Кстати, я устал пользоваться только Фонетическим справочником, т.к. это стоило бы мне много времени (Документ содержит более 10000 слов!)

Спасибо!

1 ответ

Краткий ответ заключается в том, что если вы примените шрифт DengXian ко всему тексту Ruby в полях EQ, Word должен правильно его понять.

например, если ваше поле выглядит так после того, как вы изменили\* "Font:Times New Roman"к

      { EQ \* jc2 \* "Font:DengXian" \* hps11 \o\ad(\s\up 10(běn),本}

если вы проверите шрифт в самом коде поля (а не в результате поля), это, вероятно, будет Times New Roman. Если вы вручную примените DengXian кběn, затем сохраните документ как .docx и снова откройте его, я думаю, вы получите желаемый результат.

Вы должны быть в состоянии применить правильный шрифт ко всем рубиновым текстам, используя Advanced Find/Replace или, возможно, VBA, если это необходимо, но в долгосрочной перспективе, я думаю, вам нужно попытаться убедиться, что Word использует правильный шрифт в первую очередь, и это, вероятно, потребует от вас изменить один или несколько стилей в документе. Прямо сейчас я не могу сказать вам, как это сделать, без дальнейшего изучения того, какие именно настройки Word использует для этого (по умолчанию в моей установке он все равно использует DengXIan для рубинового текста).

В качестве фона...

Когда вы изменяете имя шрифта в переключателе в поле EQ, Word применяет шрифт к рубиновому тексту в поле результата , но не применяет шрифт к рубиновому тексту в поле кода. Так что в вашем случае остается Times New Roman.

Если вы сохраняете документ в старом формате .doc, код поля сохраняется «как есть». Когда вы закрываете и снова открываете, Word все еще имеет поле, все еще может видеть шрифт, который вы указали в\* "Font:fontname"и повторно применяет его к результату поля.

Но когда вы сохраняете в формате .docx, Word вообще не сохраняет код поля. Он переводит его в WordProcessingML. В лучшем случае он записывает шрифт, который фактически был применен к рубиновому тексту, в поле code. Если вы на самом деле не применяли какое-либо прямое форматирование к рубиновому тексту, Word может решить, что он применил один из своих стилей темы, и записать шрифт примерно так (я упрощаю):

      <w:rFonts w:asciiTheme="majorBidi">

В этот момент он забыл, что вы указали . Когда вы снова открываете документ, Word заново создает поле, получает шрифт из asciiTheme и вместо этого генерирует `* «Шрифт:Times New Roman».

Если вы на самом деле применили прямое форматирование к рубиновому тексту, Word, похоже, записывает имя шрифта, больше похожее на это:

      <w:rFonts w:ascii="DengXian">

Word по-прежнему забыл, что вы указали , но получает имя шрифта изw:rFontsэлемент и воссоздает\* "Font:DengXian"

Другие вопросы по тегам