Manipulacja przypisami końcowymi w OOB

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO

Manipulacja przypisami końcowymi w OOB

Postprzez kotik7 » Cz cze 20, 2019 10:19 am

Witam wszystkich,

chciałbym napisać zestaw makr, które pozwolą mi zautomatyzować proces przystosowania dokumentów pisanych w stylu Word/Open Office do wymagań środowiska Latex. Operacje, które są mi potrzebne, obejmują zamianę tekstu pisanego kursywą/wytłuszczeniem na odpowiednie komendy (\textit, \textbf), wstawianie początku/końca środowiska w określonych miejscach dokumentu oraz, co dla mnie najtrudniejsze, zamianę przypisów końcowych, którą opiszę niżej.

Mianowicie, chciałbym by makro dla każdego przypisu:
-wpisywało jego treść wewnątrz wyrażenia \endnote{}, z pominięciem znacznika przypisu,
-przenosiło całe nowe wyrażenie w miejsce, gdzie przypis jest w tekście, usuwając jednocześnie znacznik przypisu z tekstu.

Przykład, jest:
I wtedy powiedział mu: być, albo nie być - oto jest pytanie^1. Odpowiedzi nie otrzymał.

1. W. Shakespeare, Hamlet

ma być
I wtedy powiedział mu: być, albo nie być - oto jest pytanie\endnote{W. Shakespeare, Hamlet}. Odpowiedzi nie otrzymał.

W przykładzie ^1 oznacza znacznik przypisu, standardowo w indeksie górnym.

Takie makro udało mi się napisać w VBA dla Worda, ale niestety kod nie działa pod OO Basic.
Zaznaczam, że wtyczki typu Writer2Latex nie spełniają moich oczekiwań, bo co prawda konwertują przypisy i formatowanie, ale nadmiarowo - dodają mnóstwo śmieci, które potem i tak muszę usuwać.

Bardzo proszę o pomoc, pozdrawiam.
OpenOffice 3.1 na Windows 7
kotik7
 
Posty: 4
Dołączył(a): Cz cze 20, 2019 10:09 am

Re: Manipulacja przypisami końcowymi w OOB

Postprzez Jan_J » Cz cze 20, 2019 2:56 pm

Z moich doświadczeń kod tworzony przez Writer2LaTeX jest stosunkowo czysty. Ale `czysty` jest pojęciem względnym, a `stosunkowo czysty` tym bardziej.

Ja bym się za to nie brał z poziomu API Writera i Basica, tylko jednym z dwóch sposobów:
[a] albo `od głowy`: stylami transformacyjnymi XSLT, by bezpośrednio z XML-owego dokumentu otrzymać kod LaTeX;
[b] albo `od ogona`: użyć istniejącego konwertera, powiedzmy Writer2LaTeX, a potem filtrem wyrażeń regularnych oczyścić kod wynikowy. Taki filtr mógłby byc np. zestawem reguł sed-a albo rpl-a, a gdyby to zrobić w awk lub Perl-u, pewnie byłoby mniej roboty.

Inna możliwość, to [c] wziąć jakiś język programowania posiadający bibliotekę realizującą standard XML DOM. Teoretycznie każdy współcześnie rozwijany język powinien takie coś mieć: Java, C++, C#, a z łatwiejszych Perl i Python. Writer2LaTeX napisany jest w Java, korzysta z DOM.

XSLT działa na tekście pliku / strumiania danych XML, a DOM na zbudowanym z niego w pamięci drzewie dokumentu. Więc XSLT teoretycznie jest prostszy pojęciowo.

Writer2LaTeX jest na licencji LGPL, więc teoretycznie można wykorzystać jego elementy. Ale to duży projekt, więc działaniami ad hoc łatwiej coś popsuć niż usprawnić.

Dla doraźnych celów wybrałbym [b]. Przepuścić dokument przez W2L, a potem przepuścić wynik przez skrypt odśmiecający.

W sprawie [a]: OOo2sDbk -- Convertisseur OpenOffice-Writer vers Docbook by Eric Bellot; http://ebellot.chez.com/ooo2sdbk/. Może pomóc albo natchnąć.
JJ
LO (6.1|6.2) ∙ AOO 4.1.6 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3913
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Manipulacja przypisami końcowymi w OOB

Postprzez kotik7 » Cz cze 20, 2019 3:12 pm

Dziękuję za odpowiedź.

Brzmi to niestety dla mnie jak czarna magia. Nie programuję ani w VBA, ani w Open Office Basic, ale w VBA korzystając z sieci udało mi się osiągnąć cel w parę godzin, dla Basica w ogóle ledwo co się udało ruszyć.

W VBA i w Wodzie w ogóle możliwe jest wyszukanie w dokumencie znaczników przypisów, dzięki temu mogłem wstawić za znacznikiem \endnote{, na końcu paragrafu }, a potem skopiować treść przypisu i wkleić w miejscu, gdzie był znacznik w tekście. Czy ten sposób rozumowania się da bezpośrednio przenieść do Basica?
OpenOffice 3.1 na Windows 7
kotik7
 
Posty: 4
Dołączył(a): Cz cze 20, 2019 10:09 am

Re: Manipulacja przypisami końcowymi w OOB

Postprzez Jan_J » Cz cze 20, 2019 4:05 pm

Da się.
JJ
LO (6.1|6.2) ∙ AOO 4.1.6 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3913
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Manipulacja przypisami końcowymi w OOB

Postprzez kotik7 » Cz cze 20, 2019 4:23 pm

Czy mógłbym prosić o jakiś działający przykład :) ? Jak wyszukać po znacznikach, jak stworzyć zmienną zawierającą tekst przypisu? Coś na start.
OpenOffice 3.1 na Windows 7
kotik7
 
Posty: 4
Dołączył(a): Cz cze 20, 2019 10:09 am

Re: Manipulacja przypisami końcowymi w OOB

Postprzez Jan_J » Cz cze 20, 2019 5:08 pm

Żeby przychylić się do prośby, musiałbym sam rozgryźć dostęp do przypisów w API OpenDocument, zrobić test i podesłać.
Ale gdybym sam miał to robić, wybrałbym arkusz XSLT (dałem link do przykładu) albo postprocesor przetwarzający plik .tex otrzymany z W2L.

Czytałeś o tym u Pitonyaka? AndrewMacro albo OpenOffice Macros Explained. Obie książki składają się z przykładów w Basicu. Może są tam przykłady z przypisami.
JJ
LO (6.1|6.2) ∙ AOO 4.1.6 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3913
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Manipulacja przypisami końcowymi w OOB

Postprzez kotik7 » Cz cze 20, 2019 8:35 pm

Tę drugą książkę przeglądałem, jest tam wzmianka o przypisach, ale bez przykładów. Tę drugą muszę dopiero obejrzeć. Testuję możliwości z Writer2Latex. Na razie udało mi się zmniejszyć ilość "śmieci", może coś z tego będzie. Dziękuję za wskazówki.
OpenOffice 3.1 na Windows 7
kotik7
 
Posty: 4
Dołączył(a): Cz cze 20, 2019 10:09 am


Powrót do Makra i programowanie

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość