Генерираният от pandoc docx пропуска курсивни променливи в уравненията

Имам следния сегмент на Markdown с вградени уравнения на LaTeX:

# Fisher's linear discriminant

\newcommand{\cov}{\mathrm{cov}}
\newcommand{\A}{\mathrm{A}}
\renewcommand{\B}{\mathrm{B}}
\renewcommand{\T}{^\top}

The first method to find an optimal linear discriminant was proposed by Fisher
(1936), using the ratio of the between-class variance to the within-class variance
of the projected data, $d(\vec x)$, as a criterion. Expressed in terms of the
sample properties, the $p$-dimensional centroids $\bar {\vec x}_\A$ and
$\bar {\vec x}_\B$ and the $p \times p$ covariance matrices
$S_A = \cov_i ( \vec x_{\A i} )$ and $S_B = \cov_i ( \vec x_{\B i} )$, the
optimal direction is given by 
$$
\vec w = \left ( \frac{ S_A + S_B }{2} \right ) ^{-1}
~ ( \bar {\vec x}_\B - \bar {\vec x}_\A ).
$$

Когато го конвертирам с pandoc в LaTeX и го компилирам с xelatex, получавам очаквания текст с добре изобразена математика. Когато го конвертирам с pandoc в MS Word с помощта на

pandoc test.text -o test.docx

и го отворя в MS Office Word 2007, получавам следното:

екранна снимка на дума

Само онези части от уравненията, които са символи или изправен текст, се изобразяват правилно, докато имената на променливите в курсив се заменят с въпросителен знак в поле.

Как мога да накарам това да работи?


person A. Donda    schedule 03.12.2013    source източник
comment
Въведеното от вас работи за мен с pandoc 1.12.2 на Mac OS X. Можете ли да публикувате връзка към word файла, който получавате? Ето моя: fileswap.com/dl/wajeArZq4c   -  person mb21    schedule 12.12.2013
comment
@mb21 Благодаря за отговора! Вашият docx изглежда идентичен с моя, ако го отворя в Word. Така че може би проблемът е в моето копие/инсталация на Word, а не във файла. между другото Намерих заобиколно решение: мога да превключа показването на уравнение в Word на линеен и след това обратно на професионален и всички символи се показват. – Ето моя: dl.dropboxusercontent.com/u/14431931/test.docx   -  person A. Donda    schedule 12.12.2013
comment
О, добре, така изглежда вашият документ в моето копие на Word на Mac: share.pho.to/4J6al Предполагам, че може да помогне с най-новата версия на pandoc...   -  person mb21    schedule 12.12.2013
comment
@mb21 А, не, просто все още съм направил грешка; Пропуснах последното $$. Актуализирах файла, моля, опитайте отново.   -  person A. Donda    schedule 12.12.2013
comment
А, сега изглежда точно като моя. Тези въпросителни знаци обикновено се появяват, когато избраният шрифт няма този знак. Имате ли инсталиран шрифт Cambria Math?   -  person mb21    schedule 12.12.2013
comment
Проверих, да, инсталиран е.   -  person A. Donda    schedule 12.12.2013
comment

Обмислям да добавя @link blade директива. Нещо като @link($user) и преобразувайте това в <a href="/bg/user/$user->id">$user->name</a>.

С течение на времето мога да го направя по-сложно, където връзката зависи от типа на $user, като $order и т.н. Мога да добавя методи към обекта, като getHref и getLinkName.

Изглежда като добра и проста идея, но не виждам някой друг да прави този модел онлайн.

Наясно съм с няколко алтернативни начина за изразяване на същото, например {{$user->makeLink()}}, {{$linkMaker->link($user}}, link_to_*

Въпросът ми е, правено ли е това преди? Има ли пакет, който използва blade директиви за генериране на връзка?

Ако не е направено преди, има ли причина да го избягвате? Например в 5.1 документацията е премахнала Blade::extends. Или е лоша идея блейд шаблоните да генерират HTML, той е проектиран да извежда низ.

Кодът по-долу работи - въпросът ми е трябва ли да използвам чужд пакет или различен шаблон.

    \Blade::extend(function($view, $compiler) {
        $pattern = "/(?<!\w)(\s*)@link\(\s*(.*?)\)/";
        return preg_replace($pattern, '$1<a href="/bg/user-management/view/<?php echo $2->getRouteKey() ?>"><?php echo $2->name ?></a>', $view);
    });
  -  person A. Donda    schedule 12.12.2013
comment
@А. Donda – Не можах да получа достъп до вашия .docx в dropbox, но изтеглих файла на mb21 и погледнах XML. В settings.xml шрифтът Math там е настроен на Lucida Grande, докато обикновено е Cambria Math (както беше обсъдено). Това работи добре на Mac Word, но когато се опитах да го отворя в Windows Word 2010 (който няма Lucida Grande), дори не можах да видя текста в изглед за печат (изглеждаше заседнал в изглед на чернова). Виждам, че Word използва Cambria Math за дисплея (нищо не е посочено в заместванията на шрифта). Може би това е фактор.   -  person    schedule 12.12.2013
comment
Добавих отговор въз основа на съвета от @bibadia   -  person mb21    schedule 12.12.2013
comment
Отговарям тук, за да мога да спомена @bibadia. Пресъздадох своя docx (трябва отново да е достъпен чрез връзката) и го разгледах. Прав си, файлът препраща към Lucida Grande вместо Cambria Math. Проверих, тази настройка идва от reference.docx, който идва с pandoc. Промяната на тази настройка и генерирането на нов docx обаче не променя нищо относно моя проблем с дисплея. Но все пак благодаря за усилията!   -  person A. Donda    schedule 12.12.2013
comment
Да, открих, че моето Windows копие на Word е в необичайно състояние - сега това е поправено, както вашият файл, така и този, който имах по-рано, се отварят добре с всички символи, показвани в Word 2010. Ще опиша какво се случва в Word 2007 в Отговор - тук няма достатъчно място.   -  person    schedule 13.12.2013


Отговори (3)


В Word 2007 виждам резултат, подобен на вашия, с изключение на това, че тук не виждам знаците „въпросителни знаци в полета“, а само интервал.

Ако след това взема един от изразите и използвам вашия трик за преминаване към линеен дисплей и обратно, знаците се появяват отново за този израз.

Ако запазя и отворя отново, другите изрази все още не се показват правилно, но ако запазя и погледна XML, забелязвам, че

  1. шрифтът Math е променен на Cambria Math
  2. допълнителен параметър за изпълнение (w:rPr) XML, указващ шрифта Cambria Math, е вмъкнат в много от циклите (w:r) вътре в елементите на oMath, дори в изразите на oMath, които не се показват правилно. Въпреки това, в израза oMath, който сега се показва правилно, този допълнителен XML е приложен към всяко изпълнение. В другите е приложен само за някои изпълнения (мисля, че виждам модела, но в момента не ми достига времето...)
  3. Ако ръчно добавя XML към другите изпълнения и отворя отново документа, изразите се появяват правилно. Или поне го правят в единствения случай, който пробвах.

Тъй като Word 2010 показва резултатите правилно, мога само да предположа, че не разчита на тези изрични настройки на шрифта, докато Word 2007 го прави. Това все още не ви помага наистина, защото промяната на всички тези w:r елементи ще бъде дори по-трудно от това, което вече правите. Но е възможно стил/шрифт по подразбиране да трябва да бъде зададен или някъде по-високо в йерархията на XML, или може би другаде в .zip (може би във fontTable.xml или styles.xml). Не съм достатъчно запознат с XML структурите на Word, за да позная какво, ако нещо може да липсва, но може би ще мога да погледна утре.

Предполагам, че друга възможност е просто да имате всички тези допълнителни rPr елементи, за да работи това в Word 2007, което предполага, че pandoc може да е бил написан за Word 2010, а не за 2007. (Не знам нищо за инструмента ).

Като пример, където имате

<m:r>
  <m:t>(</m:t>
</m:r>

това, от което се нуждаете, е

<m:r>
  <w:rPr>
    <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math" />
  </w:rPr>
  <m:t>(</m:t>
</m:r>
person Community    schedule 12.12.2013
comment
Все още не виждам всичко ясно, особено след като XML, генериран от Word, е труден за четене, но определено сте на прав път. Ще се опитам да видя дали промените в reference.docx, който pandoc използва, карат това да изчезне без трика. Може би ще изпратя доклад за грешка. Ако случайно разберете повече, моля, актуализирайте отговора. Във всеки случай: благодаря много! - person A. Donda; 13.12.2013
comment
Огледах обстойно, но в момента не виждам друг начин да избегна всички тези отделни настройки на w:rPr. Надявах се, че промяната на елемента dispDef под mathPr в settings.xml може да има ефект, но не. Нито едно от другите неща, които опитах (за всеки случай!), като добавянето на Cambria Math към fontTable.xml, нямаше ефект. - person ; 13.12.2013

Направих следното, за да се отърва от проблема с шрифта:

  1. Създайте нов празен документ на Word.
  2. Копирайте цялото съдържание в новия документ.
  3. Изберете Съвпадение на изходния формат.
person user4794413    schedule 16.04.2015

Както беше обсъдено по-горе, Windows няма шрифт Lucida Grande, така че заместването на математическия шрифт с Cambria Math трябва да работи.

  1. Преименувайте test.docx на test.zip
  2. vim test.zip и изберете test/word/settings.xml
  3. намерете и променете Lucida Grande на Cambria Math
  4. запишете и преименувайте zip в docx. Това води до нещо като този docx.

След това можете също да предоставите този файл като нещо като docx шаблон на pandoc с -- опция reference-docx.

person mb21    schedule 12.12.2013
comment
Това не работи. Имам същия проблем като OP, но математическият шрифт, дефиниран във файла, генериран от pandoc, е Cambria Math. - person January; 29.04.2018