Jak zamienić wszystkie obrazy w Libreoffice z ich opisem

12

Mam bardzo długi dokument zawierający wiele obrazów svg utworzonych przy użyciu rozszerzenia TexMaths. To rozszerzenie używa instalacji lateksowej do utworzenia obrazu svg wprowadzonego równania (lub zestawu równań). Kod lateksowy dla każdego równania (lub zestawu równań) jest osadzony w obrazie jako część jego opisu. Dostęp do takiego opisu można uzyskać, klikając prawym przyciskiem myszy obraz svg i wybierając opcję Opis.

Chcę zastąpić wszystkie obrazy svg za pomocą odpowiedniego makra osadzonymi opisami.

np. z

Słynne równanie Einsteina, [svg embedded equation: E = mc 2 ], mówi nam, że masę można przeliczyć na energię i odwrotnie.

Do

Słynne równanie Einsteina, E = mc ^ 2, mówi nam, że masę można przeliczyć na energię i odwrotnie.

Pozwoli mi to ręcznie przekonwertować plik odt zawierający liczne równania TexMaths na LaTeX.

użytkownik30131
źródło
4
Spójrz na odpowiedź w Jak usunąć wszystkie obrazy z dokumentu w LibreOffice Writer? . To da ci podstawy tego, co chcesz zrobić, ale będziesz musiał to trochę dostosować. Jeśli nie jesteś w stanie dokonać niezbędnych zmian, mogę to zrobić; ale nie byłbym w stanie się do tego dostać przez kilka dni.
chaskes
4
Cóż, bardzo dużo. W rzeczywistości spojrzałem na powyższy post przed zadaniem pytania. Ogólny plan polega na utworzeniu pętli przechodzącej przez każdy obraz svg. Dla każdego obrazu przeczytaj opis i usuń niepotrzebne znaki, aby pozostało czyste równanie lub coś w rodzaju \ begin {} .. \ end {}. Następnie usuń obraz svg. To, co mnie teraz zastanawia, to kwestia umieszczenia tekstu w miejscu usuniętego obrazu. Nawiasem mówiąc, większość z nich jest zakotwiczona jako postacie.
user30131
Pomysł, spróbuj połączyć graphmonkey z częścią kodu źródłowego libre-office dotyczącą ikon / obrazów?!
dschinn1001
@ dschinn1001 Dziękujemy, BTW TexMaths to wtyczka do formuł. Czy możesz wyjaśnić więcej. Nie udało mi się ustalić, w jaki sposób graphmonky przekształci obiekty rysujące TexMaths w opis. Innymi słowy, wcześniej nie słyszałem o Graphmonkey; Czy ma opcję, myślałeś, że może to rozwiązać problem?
user.dz

Odpowiedzi:

2

To inny sposób bez użycia makr. Ponieważ .odtplik to w zasadzie tylko spakowane pliki, a główny plik to XML.

  1. Utwórz arkusz stylów XML texmath_raw_equation.xslt

    Pełna zawartość jest dostępna na wszelki wypadek.

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" version="1.0">
    
        <xsl:template match="@* | node()">
          <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
          </xsl:copy>
        </xsl:template>
    
        <xsl:template match="draw:g">
            <xsl:value-of select="svg:desc"/>
        </xsl:template>
    
    </xsl:stylesheet>
    
  2. Wyodrębnij .odtplik do tmpfolderu, przykład texmath_test.odt:

    7z x -otmp texmath_test.odt
    
  3. Zamień obraz TexMath (przytrzymaj przez <draw:g></draw:g>znacznik) na jego opis (przytrzymaj przez <svg:desc></svg:desc>znacznik)

    xsltproc -o content.xml texmath_raw_equation.xslt tmp/content.xml
    mv content.xml tmp/content.xml
    
  4. Kompresuj z powrotem do nowego .odtpliku

    cd tmp
    7z a -tzip ../texmath_test_new.odt *
    cd ..
    rm -r tmp
    

Bibliografia:

user.dz
źródło