2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Tex4ht->ooffice->word
Сообщение28.10.2009, 14:59 


28/10/09
15
Существует LaTeX, существует Word. Я готовлю документы в LaTeX, увы, часто требуют в Word+MathType.
Нужен метод преобразования.

Идеальный конечный результат: конвертор запускается автоматически из Makefile, выдаёт файл word, который без ошибок отображает исходный документ LaTeX, причём формулы должны быть редактируемы в MathType/Equation Editor, а форматирование документа соответствует исходному. Программа должна работать в GNU/Linux.

Понятно, что идеальный конечный результат недостижим из-за разной идеологии форматов. Но приблизится к нему можно.

Вопрос этот я изучаю давно, пробовал различные конверторы и программы. Все программы дают разный результат, нигде он не идеален. Наиболее удобным был бы latex2rtf, но качество конвертации, особенно формул, никакое.

Наилучшие на данный момент результы достигнуты связкой tex2word+MathType, в основном за счёт качественной работы MathType. Формулы конвертируются хорошо. Форматирование документа не соответствует исходным стилям LaTeX, макросы и всякие латеховские штучки не поддреживаются. Фактически, хорошо поддерживаются только формулы. Но этот вариант пригоден для использования в реальной жизни, хотя имеет недостатки, отдаляющие его от идеального конечного результата:
- конверсия не автоматическая;
- результат требует правки вручную;
- для работы нужен MathType+Word => Windows.

Исходя из всего этого, моё убеждение, что качественно преобразовать документ LaTeX можно только прогнав его через сам TeX. Всё остальное - суррогат. Такова жизнь, таков TeX.

Единственный известный мне на сегодня конвертор, прогоняющий в процессе работы файлы через TeX - tex4ht. Именно поэтому я считаю его перспективным.

Хотелось бы использовать следующий вариант:
.tex -> oolatex -> .odt -> ooffice -> .doc.

Увы, качество работы tex4ht на сегодня не позволяет использовать его для реальной работы. Обсуждение данной программы практически отсутствует, документация никакая. Такое впечатление, что им никто не пользуется. Нужно приспособить эту программу для реальной жизни.

-- Ср окт 28, 2009 15:02:21 --

Итак, рассматривается вариант преобразования
.tex -> oolatex -> .odt -> ooffice -> .doc

Связанные с этим проблемы.
- не отображаются русские буквы (совсем);
- формируются неправильные формулы ooffice;
- ooffice не способен правильно конвертировать документы с формулами в word.

-- Ср окт 28, 2009 15:20:25 --

Русские буквы оставим на будущее, не думаю, что здесь будет много проблем.
Первая проблема. Подготовил простейший документ LaTeX:

Код:
\documentclass{article}
\begin{document}
\[
        R_k = \int_{t_k}^{t_{k+1}} y(t)\cdot s_{ref}(t) dt
\]
\end{document}


LaTeX обработал его без проблем. Пропустил через oolatex, он создал файл test.odt. Этот файл открылся в ooffice, но формула была неправильная. Вместо
Код:
R_k ="∫"_{t_k}^{t_{k + 1}} y { \(  t  \)}  cdot s_{r e f} { \(  t  \)} d t

отобразилась формула
Код:
R_k ="∫"_t_k^t_{k + 1} y { \(  t  \)}  cdot s_{r e f} { \(  t  \)} d t

Выглядит это так:
Изображение
Таким образом, проблема в том, что tex4ht "забыл" поставить фигурные скобки вокруг сложных индексов. Соответсвующий вопрос я отправил по почте автору программы, посмотрим, что скажет. Программа сейчас поддерживается, последние версии относятся к текущему году.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение29.10.2009, 10:13 


29/04/09
103
eugene_b в сообщении #255939 писал(а):
Существует LaTeX, существует Word. Я готовлю документы в LaTeX, увы, часто требуют в Word+MathType.
Нужен метод преобразования.

Зачём?

Если готовится отчёт, а результат нужно отправлять в формате Word (хотя просят чаще rtf), формулы набранные в ME (в вашем случае MT), можно тупо проигнорировать эти требования: прислать документ в формате rtf, а формулы в виде рисунков.

Я нашёл этому простое обоснование (для себя):
мне удобнее набирать формулы в \LaTeX'е, если вы (в смысле, кто просит в Word формате) хотите править мои формулы, значит вы мой соавтор, милости прошу, познакомтесь с \LaTeX'ом, его и используем. Если нет, эм, извините, а за каким вам нужно изменять мои формулы? Рисунок не смогут (просто) отредактировать, а формулы, набранные в ME или MT --- да.
eugene_b в сообщении #255939 писал(а):
Единственный известный мне на сегодня конвертор, прогоняющий в процессе работы файлы через TeX - tex4ht. Именно поэтому я считаю его перспективным.

Я остановился на этом.

Делал так: преобразовывал \LaTeX'овский документ в html (или xhtml, не помню), отправлял знакомому с устаноленным Word'ом (почему-то OOo не захотел открывать html как обычный документ), он сохранял как rtf. Всё.

eugene_b в сообщении #255939 писал(а):
Итак, рассматривается вариант преобразования
.tex -> oolatex -> .odt -> ooffice -> .doc


Попробуйте html, поддержка odt в tex4ht просто плохая. Но сама система очень гибкая и настраиваемая. Если бы знал детали как устроен odt, написал бы стили для tex4ht для odt.
eugene_b в сообщении #255939 писал(а):
Таким образом, проблема в том, что tex4ht "забыл" поставить фигурные скобки вокруг сложных индексов.

eugene_b в сообщении #255939 писал(а):
Соответсвующий вопрос я отправил по почте автору программы, посмотрим, что скажет.

Скажет приблизительно следующее: "Вам нужно --- вы и пишите", или "К сожеланию, я не поддерживаю стиль для odt, но если у вас есть необходимые знания о формате odt, помоги и напишите стиль".

Второе вероятнее, там люди культурнее :mrgreen:

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение29.10.2009, 11:35 


28/10/09
15
Вероятнее всего, правильнее поступить по второму варианту - мне надо, я и пишу.

К вопросу "зачем?", так у меня на работе используют Word, и как соавторы, отказаться я не могу. Вот какая сложность. На LaTeX пересадить нельзя.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение29.10.2009, 13:10 


29/04/09
103
eugene_b в сообщении #256184 писал(а):
...у меня на работе используют Word, и как соавторы, отказаться я не могу...

Сожалею.

Впрочем, вы могли бы поступить так: взять на себя всю работу по набору текста, в \LaTeX'е естественно (я считаю что результат набора в \LaTeX'е более "эстетически красивый", но это IMO).

Если есть возможность, проагатируйте использовать \LaTeX. По моим наблюдениям, только старшее поколение, которое только только освоило компьютер, и сответственно Word, не хочет использовать (учиться использовать) \LaTeX.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение30.10.2009, 23:31 


28/10/09
15
Есть ряд причин, по которым нужно использовать Word. Не хотелось бы вдаваться в дискуссии на эту тему. Я хочу решить конкретный вопрос - удовлетворительный метод преобразования формата LaTeX в doc.

Варианты с промежуточным html/xml не подошли - tex2ht при конвертации в html формулы переделывает в картинки, а если переводить в XML+MathML, то результат открыть можно только в Mozilla, Opera тоже понимает, а вот OOffice и MSoffice открыть это уже не могут. А мне нужно в конце получить doc, поэтому меня этот вариант не устроил.

Исходя из всего этого, будут ковырять tex4ht.

Что касается русских букв, они отсутствовали из-за примитивной ошибки в преамбуле документа. По крайней мере, у меня сейчас локаль utf8, с ней tex4ht без проблем выдаёт русские буквы в результирующем документе OpenOffice. Поигрался с начертанием шрифтов - жирний, курсив и т.д. - нет проблем! Итак, русский язык поддерживается нормально.

Пока игрался с русскими шрифтами, увидел следующую проблему. Форматирование не соответсвует исходному, причём из-за того, что конвертор слишком умный. Я сделал несколько разделов /section, /subsection. В исходном документе после Latex (класс article) название раздела сделано с отступом, шрифт жирный большего размера. В документе odt было не так - шрифт тоже жирный, но того же размера, что и текст, и выровнят по центру! Короче говоря, форматирование другое. Начал исследовать промежуточные файлы dvi, образующиеся в процессе работы. В этих файлах тоже не то форматирование, причём не совпадает ни с odt, ни с pdf, формируемым pdflatex. Отличие pdf от промежуточного dvi - определённо влияние стилевого пакета tex4ht.
Что касается odt - там конвертор использовал встроенные стили openoffice Heading-1, Heading-2! То есть внешний вид определяется уже этими стилями.
Дальнейшее исследование показало, что эти стили не встроенные, а созданные tex4ht. Это даёт надежду, тогда их можно менять. Просто tex4ht делает их не так.
Распаковав файл odt (это архив zip), я определил, что перечисленные стили определены в файле styles.xml, который можно свободно менять. Но делать это должен tex4ht, и правильно! В реальности файл style.xml, я предполагаю, это просто "рыба", которую tex4ht подставляет во все документы. Хотя в исходниках tex4ht файлов xml нет. Будем копать дальше.

Что касается формулы, то она в сформированном odt расположена в отдельном каталоге в виде файла content.xml, содержащего описание на языке MathML. Вот оно сформировано неверно. Как формируется этот MathML, я пока не разобрался, буду читать исходники. Там часть на Java, я с ним не знаком, ну да это ничего - не привыкать :) .

PS. Автор программы, кстати, на письмо ничего не ответил.

-- Сб окт 31, 2009 00:07:34 --

Исследование формул, сформированных tex4ht показало, что формулы правильные! Их неправильно отображает OpenOffice!. В распакованном файле odt я взял файл xml, отвечающий за мою формулу, открыл его в Opera, и формула отобразилась абсолютно правильно! Таким образом, вопросы нужно адресовать не к tex4ht, а к OpenOffice. Такие вот дела. Нужно KOffice/AbiWord попробовать, как там с формулами. Ещё один вопрос к tex4ht снят.

-- Сб окт 31, 2009 00:14:33 --

Поиск по ошибкам OpenOffice привело к следующей странице:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=384958
Заметьте, ошибка датируется 2006 годом и с тех пор не решена. Рецепт, заключающийся в том, что все индексы нужно брать в фигурные скобки, не помогает.

-- Сб окт 31, 2009 00:28:35 --

На основном сайте OpenOffice ошибка зарегестрирована в 2006 году (http://qa.openoffice.org/issues/show_bug.cgi?id=69088), срочность указана, как "OOo later".
Тогда была версия OO 2.0, сейчас OO 3.1. Короче говоря, нужно брать в руки напильник (Emacs), и разбираться самому.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение31.10.2009, 03:02 


28/10/09
15
Я прочитал исходный текст формулы на MathML, сформированной tex4ht - там всё правильно.
Затем я прочитал текст формулы на MathML, сохранив её из OpenOffice - текст не соответствует исходному и содержит ошибки.
Затем я исправил формулу в редакторе OpenOffice и сохранил результат в MathML. Анализ последнего показал, что формула правильная, причём по структуре практически соответствует исходной формуле, сформированной в tex4ht.
Вывод - формулу портит конвертор из MathML во внутренний формат OpenOffice. Обратная конверсия при этом происходит правильно.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение31.10.2009, 16:06 


28/10/09
15
Дальнейшее изучение файлов MathML показывает следующее.
1) OOMath не в состоянии правильно интерпретировать корректные файлы MathML.
2) OOMath может сохранять правильные файлы MathML, и правильно их затем открывать.
Здесь возникает вопрос - как так получается?
Ответ заключается в том, что OOMath при сохранении добавляет туда строку с той же формулой, но в своём внутреннем формате. Так, например, формула OOMath
Код:
R_k = "∫"_{t_k}^{t_{k + 1}} y {{ \(  t  \)}  cdot  s_{r e f}} { \(  t  \)} d t

которая в LaTeX должна выглядеть так:
$R_k = \int_{t_k}^{t_{k+1}}y(t) \cdot s_{ref}(t)dt$
уж поверьте (код приводить не буду - он слишком длинный) сохраняется в MathML корректно.
НО! Кроме того, OOMath добавляет в конец строку:
Код:
<math:annotation math:encoding="StarMath 5.0">R_k = "∫"_{t_k}^{t_{k + 1}} y { \(  t  \)}  cdot  s_{r e f} { \(  t  \)} d t</math:annotation>

Данная строка содержит формулу во внутреннем формате OOMath. Если сформированный в OOMath файл MathML содержит эту строку, то OOMath способен открыть данный файл корректно.
Если эту строку из файла MathML удалить (но сам код MathML (корректный!)) оставить, то OOMath снова откроет формулу неправильно!
Таким образом, преобразование OOMath->MathML работает верно, преобразование MathML->OOMath работает с ошибкой. Однако при этом OOMath ищет в файле MathML дополнительную строку в своём внутреннем формате, и при наличии этой строки использует её, а код MathML просто игнорирует.
Такие вот дела.

PS Начал анализировать исходники OpenOffice. Если кому-нибудь интересно, класс SmXMLWrapper, отвечающий за преобразование из/в MathML находится в файле:
Код:
ooo/build/ooo310-m19/starmath/source/mathml.cxx

Этот класс, в свою очередь, вызывается классом SmDocShell из файла
Код:
ooo/build/ooo310-m19/starmath/source/document.cxx

В последнем файле есть функция SmDocShell::ConvertFrom(). В этой функции определяется, в каком формате задана импортируемая формула (MathML или MathType 3.0) и вызывается соответствующий класс (SmXMLWrapper в случае с MathML).

Проблема, очевидно, зарыта где-то в этой области.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение04.11.2009, 13:35 


28/10/09
15
Я недавно оставлял сообщение на странице http://www.openoffice.org/issues/show_bug.cgi?id=69088 по поводу ошибки с поддержкой индексов в формулах MathML. Мне ответили! Thomas Lange подсказал, где искать дальше (хотя перечисленные места программы я уже видел). Но по крайней мере, он сказал, что весь код, отвечающий за MathML находится там, где я ищу и ничего сверх того нет. Будем работать дальше. На вид там всё правильно, нужно поотлаживать программу, к сожалению, у меня пока не хватает времени - на работе сдача заказов. Но я расчитываю докопаться до этой проблемы.

-- Ср ноя 04, 2009 13:39:47 --

А вообще я планирую составить тест. Скажем, взять книгу Львовского по LaTeX, и прямо по порядку оттуда вставить перечисленные конструкции в файл LaTeX, прогнать через tex4ht и посмотреть, что получится в разных форматах.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение07.11.2009, 20:06 


24/03/09
6
Извините, вопрос немного не по теме.
А как вы преобразуете odt в doc?

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение08.11.2009, 19:10 


28/10/09
15
А я пока ещё не преобразую, только собираюсь. Это следующий этап. Думал использовать openoffice - он умеет "открывать" odt и "закрывать" doc. Этот вопрос я ещё подробно не рассматривал, но известно, что по умолчанию openoffice сохраняет формулы в документе doc в виде OLE объектов OOMath, что меня не устраивает. Но я точно знаю, что в openoffice есть преобразование формул в MathType 3, сам видел это в исходниках. Пока не пробовал. А формулы OOMath в Word отображаются нормально, но редактировать их без OOMath, естественно, нельзя.

Другой путь - использовать Word 2007 SP2 или Word 2007 с установленым плагином, открывать сразу документ odt. Причём плагина есть два. Один - от Misrosoft (есть в исходниках под лицензией BSD): http://odf-converter.sourceforge.net/, второй - от SUN (распространяется свободно): http://www.sun.com/software/star/odf_plugin/.

Но сам я эти варианты не пробовал, тут нужно Windows и MS office, а мне надо под Linux. Любопытно узнать, что могут эти плагины. Пока проблема преобразования упирается в глюки OpenOffice, а в таком варианте он не нужен.

-- Вс ноя 08, 2009 19:15:19 --

Кстати, последний плагин от SUN, надо полагать, должен хорошо формулы поддерживать. OpenOffice создан фирмой SUN (кто не верит - посмотрите исходники), и формат odf активно двигает SUN. Возможно, здесь совместимость будет. Обратите внимание в ссылке есть "star". star - это StarOffice, иными словами говоря, OpenOffice. Хотя тогда там наверное будут те же исходники и тот же глюк... Смешно... Но тогда это можно исправить.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение09.11.2009, 06:20 


29/04/09
103
eugene_b :shock:

Вы проделали не тривиальную работу. Насколько я понял идеологию TeX4ht, там всё настраивается, но используетеся при этом сам TeX/LaTeX, его команды, т.е. всё форматирование задаётся с помощью этих команд. Но это я думаю, вы уже нашли. В том числе, в этих командах задаётся как преобразовать математические формулы в разные форматы. Вот до этого я и не дошёл, лень, знаете. Проще всё набрать в LaTeX'е, чем заморачиваться с настройкой и изучением премудростями мат. формата в Word или OpenOffice.

Где-то с полгода назад я видел статью (в интернете конечно), в которой анализировался уровень поддержки odf в Word. Сравнивались две версии плагина: от MS и SUN. Последний позволял читать документы созданные OpenOffice'ом и сохранять документы так, чтобы их мог прочитать Oo, без (большой) потери форматирования.

Это сладкая пилюля, а теперь горькая:
http://www.tug.org/pipermail/texhax/200 ... 13706.html

В частности
Цитата:
CVR and I are doing our best

в http://www.tug.org/pipermail/texhax/200 ... 13707.html

P.S. Программа очень гибкая, но практически не настроенная: ничего кроме html не работает должным образом.

P.P.S. Может, когда luaTeX будет более стабилен, часть TeX4ht перепишут на lua и будет более понятная поддержка выходных форматов, ну а пока что, что имеет, тем и пользуемся.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение09.11.2009, 09:13 


28/10/09
15
http://tug.org/tex4ht: печально... Я смотрел исходники Tex4ht, работа, проведённая Eitan Gurari за последние полтора десятка лет над этим проектом огромна.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение10.11.2009, 08:40 


28/10/09
15
Вот результат сравнительного тестирования по совместимости таблиц в формате ODF. Не в пользу продукции Microsoft, они решили пойти по традиционному пути, MS Office 2007 SP2 оказался мало совместим с остальными программами...
http://www.robweir.com/blog/2009/05/upd ... sheet.html

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение12.11.2009, 17:41 


28/10/09
15
Проверил работоспособность плагина ODF от Sun. Как я и предполагал, в формуле точно та же ошибка, что и при её открытии в OpenOffice, что ещё раз доказывает, что этот плагин основан на StartOffice. Осталось только ошибку откопать... Что-то исходники из svn у меня никак не собираются.
Ещё вопрос - что делать с формулой OOMath. Можно ли её как-нибудь преобразовать в MathType? Внутри документа ODT есть исходники (причём правильные) формулы в MathML. По идее, MathType может обрабатывать MathML.

 Профиль  
                  
 
 Re: Tex4ht->ooffice->word
Сообщение12.11.2009, 19:03 


24/03/09
6
По-моему для этого достаточно выставить флажки в Сервис->Параметры->Загрузка/Сохранение->MirosoftOffice

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group