Szanowni Państwo,
jestem zupełnym laikiem, więc z góry proszę o wyrozumiałość. Przeszukiwałam dość długo forum i nie znalazłam satysfakcjonującej mnie odpowiedzi. Czy ma może ktoś z Państwa makro do podwieszania wiszących spójników, aby działało w LO 4.0? A może dysponują Państwo innymi ciekawymi i przydatnymi makrami? To mój debiut, chciałabym się nauczyć instalować i stosować makra, więc będę wdzięczna za wskazówki.
Z pozdrowieniami!
Podwieszanie spacji a makro
Podwieszanie spacji a makro
LibreOffice 4.0
Re: Podwieszanie spacji a makro
Co do usuwania wiszących słów, istnieje, czy raczej istniał wątek https://forum.openoffice.org/pl/forum/v ... p?f=8&t=63 oraz kilka pokrewnych.
W podsumowaniu: są dwie metody mądre, choć niemożliwe do zastosowania, i jedna głupia ale możliwa:
Tak że ważny temat wisielców nie okazał się najszczęśliwszy, jeżeli chodzi o naukę instalacji makr ...
W podsumowaniu: są dwie metody mądre, choć niemożliwe do zastosowania, i jedna głupia ale możliwa:
- wstawiać spację niełamliwą u+00a0. Proste, łatwe, dobre ćwiczenie na wyrażenia regularne albo nawet i na makra. Problem w tym, że znak ten we Writerze jest traktowany jakby miał stałą szerokość, mimo że Unicode tego nie wymaga. Patrz błąd https://issues.apache.org/ooo/show_bug.cgi?id=23333 (status ACCEPTED) oraz https://bugs.freedesktop.org/show_bug.cgi?id=41652
- skoro się nie da ze spacją niełamliwą, może by wykorzystać symbole zakazu łamania wiersza? niestety, algorytm dzielenia wierszy we Writerze reaguje tu nadzwyczaj dziwnie. Zgłosiłem kiedyś błąd w Libre https://bugs.freedesktop.org/show_bug.cgi?id=57652, dyskusję można poczytać, także w poprzednim odnośniku.
- skoro nie da się mądrze, można próbować głupio: zamiast wstawiać zakazy podziału, wymuszać zakończenia wierszy w optymalnych miejscach. Wierszy, nie akapitów. Efekt zostanie osiągnięty, jednak wynik będzie niepodatny na przeskładanie: coś jakby wstawiać kreskę ze spacją zamiast włączać dzielenie wyrazów. Oczywiście makro da się napisać, ale moim zdaniem nie warto...
Tak że ważny temat wisielców nie okazał się najszczęśliwszy, jeżeli chodzi o naukę instalacji makr ...
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Podwieszanie spacji a makro
Nawet jeśli byłoby dostępne działające makro, to i tak można byłoby je traktować jako prowizoryczne rozwiązanie problemu. Temat niełatwy do przejścia nie tylko dla Writera, ale całego cyfrowego składu (wyłączając zaawansowane systemy DTP).
LibreOffice (wersja stabilna) | Crunchbang
Re: Podwieszanie spacji a makro
Dziękuję za odpowiedzi.
Oczywiście pierwszy podany wątek przejrzałam, ale nie znalazłam kodu na makro. Kiedyś pracowałam na Wordzie i własnie wykorzystywałam makro na spacje nierozdzielające, myślałam, że w LO będę mogła robić to samo.
Próbowałam (podług wskazówek z innych wątków) zainstalować makro na łącznik opcjonalny i na zmianę nazw miesięcy - ale również bezskutecznie, podejrzewam, że to moja niewiedza na to nie pozwala.
Oczywiście do tej pory podwieszałam Ctrl+Shift+Spacja, pewnie dalej tak będę robić, jeżeli stosuje się dzielenie wyrazów, to nie wygląda to aż tak źle, nie tworzą się korytarzyki.
Tak naprawdę to prowadzę takie zajęcia dodatkowe z wykorzystanie podstawowych funkcji LO i chciałam zaprezentować słuchaczom właśnie działanie makra, będę musiała niestety wymyślić coś innego.
Oczywiście pierwszy podany wątek przejrzałam, ale nie znalazłam kodu na makro. Kiedyś pracowałam na Wordzie i własnie wykorzystywałam makro na spacje nierozdzielające, myślałam, że w LO będę mogła robić to samo.
Próbowałam (podług wskazówek z innych wątków) zainstalować makro na łącznik opcjonalny i na zmianę nazw miesięcy - ale również bezskutecznie, podejrzewam, że to moja niewiedza na to nie pozwala.
Oczywiście do tej pory podwieszałam Ctrl+Shift+Spacja, pewnie dalej tak będę robić, jeżeli stosuje się dzielenie wyrazów, to nie wygląda to aż tak źle, nie tworzą się korytarzyki.
Tak naprawdę to prowadzę takie zajęcia dodatkowe z wykorzystanie podstawowych funkcji LO i chciałam zaprezentować słuchaczom właśnie działanie makra, będę musiała niestety wymyślić coś innego.
LibreOffice 4.0
Re: Podwieszanie spacji a makro
Nie chodzi o korytarzyki. Podstawowy system łamania wierszy we Writerze jest nędzny: wypełnij bieżący wiersz -> spróbuj podzielić następne słowo, a nuż się zmieści -> wyjustuj -> przejdź do następnego. Ale to osobna sprawa._justyna pisze:do tej pory podwieszałam Ctrl+Shift+Spacja, pewnie dalej tak będę robić, jeżeli stosuje się dzielenie wyrazów, to nie wygląda to aż tak źle, nie tworzą się korytarzyki
Problem w tym, że w trybie justowania spacja u+0020 jest elastyczna, a u+00a0 ma stałą szerokość. Czyli podklejone spójniki są na ogół zbytnio zbliżone do następującego po nich słowa.
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Podwieszanie spacji a makro
Potrzebne będą dwa makra w LIbreOffice Basic, w Moje okna dialogowe i makra/Standard/Module1
Makro PrzeniesZwis wykonuje następujące operacje:
Ciąg <litera początkowa><łącznik nierozdzielający zerowej szerokości><spacja><litera końcowa> przymocowuje literę początkową do litery końcowej podobnie jak twarda spacja, ale w sposób elastyczny. Operację taką, czyli doklejenie do ostatniej litery wiersza wspomnianego łącznika dokonuje pierwsze makro. Czasami jednak, gdy gęstość liter w następnym wierszu staje się krytyczna, operacja ta nieskutkuje i wówczas trzeba użyć drugiego makra, które zamieni spację na twardą spację. Ponieważ gęstość następnego wiersza jest krytyczna, twarda spacja jest dobrą miarą justunku, szczególnie gdy włączone jest dzielenie wyrazów.
Makro można rozbudować do czegoś większego, co by sprawdzało tekst linię po linii i w razie wykrycia zwisającej literki, przesuwało ją na początek następnej linii. Odsyłam do odpowiedniego wątku na tym forum: viewtopic.php?p=11229#p11229
Jeśli chodzi o mnie, to czekając na ciekawsze rozwiązanie, wstawiłem te makra jako przyciski do paska narzędzi, zmieniając im nazwę i dodając ikonki.
Kod: Zaznacz cały
sub PrzeniesZwis
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:InsertZWNBSP", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array())
end sub
sub KrytycznaGestoscTekstu
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:InsertNonBreakingSpace", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array())
end sub- Wstawienie łącznika nierozdzielającego
- Przejście na koniec linii
- Usunięcie kolejnego znaku
- Wstawienie twardej spacji
- Przejście na koniec linii
Ciąg <litera początkowa><łącznik nierozdzielający zerowej szerokości><spacja><litera końcowa> przymocowuje literę początkową do litery końcowej podobnie jak twarda spacja, ale w sposób elastyczny. Operację taką, czyli doklejenie do ostatniej litery wiersza wspomnianego łącznika dokonuje pierwsze makro. Czasami jednak, gdy gęstość liter w następnym wierszu staje się krytyczna, operacja ta nieskutkuje i wówczas trzeba użyć drugiego makra, które zamieni spację na twardą spację. Ponieważ gęstość następnego wiersza jest krytyczna, twarda spacja jest dobrą miarą justunku, szczególnie gdy włączone jest dzielenie wyrazów.
Makro można rozbudować do czegoś większego, co by sprawdzało tekst linię po linii i w razie wykrycia zwisającej literki, przesuwało ją na początek następnej linii. Odsyłam do odpowiedniego wątku na tym forum: viewtopic.php?p=11229#p11229
Jeśli chodzi o mnie, to czekając na ciekawsze rozwiązanie, wstawiłem te makra jako przyciski do paska narzędzi, zmieniając im nazwę i dodając ikonki.