Manipulacja przypisami końcowymi w OOB

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
kotik7
Posty: 4
Rejestracja: czw cze 20, 2019 10:09 am

Manipulacja przypisami końcowymi w OOB

Post autor: kotik7 »

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
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Manipulacja przypisami końcowymi w OOB

Post autor: Jan_J »

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;
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 . 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 (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
kotik7
Posty: 4
Rejestracja: czw cze 20, 2019 10:09 am

Re: Manipulacja przypisami końcowymi w OOB

Post autor: kotik7 »

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
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Manipulacja przypisami końcowymi w OOB

Post autor: Jan_J »

Da się.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
kotik7
Posty: 4
Rejestracja: czw cze 20, 2019 10:09 am

Re: Manipulacja przypisami końcowymi w OOB

Post autor: kotik7 »

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
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Manipulacja przypisami końcowymi w OOB

Post autor: Jan_J »

Ż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 (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
kotik7
Posty: 4
Rejestracja: czw cze 20, 2019 10:09 am

Re: Manipulacja przypisami końcowymi w OOB

Post autor: kotik7 »

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
ODPOWIEDZ