Zmiana * na cdot
Zmiana * na cdot
Witam, czy jest możliwość ustawienia w Math aby po wciśnięciu * na klawiaturze numerycznej Math interpretował to jako wpisanie komendy cdot ?
LibreOffice 3.6.*.* Win 7 & LMDE
Re: Zmiana * na cdot
Łatwej metody zdaje się nie ma. Math pozwala na tworzenie własnych symboli, ale ich nazwy muszą być poprzedzone znakiem %, zaś wynik będzie zwykłym symbolem, a nie znakiem działania, co wpływa na otaczanie go odstępami. Interfejs nie przewiduje ingerencji użytkownika w znaczenie słów kluczowych i podstawowych symboli działań.
Autokorekta nie jest stosowana w Math (poza tym działałaby także w innych modułach pakietu). Takoż nie funkcjonują autoteksty. Co się nasuwa, to napisać makropolecenie, które śledzi formułę i robi w niej porządki.
PS. rozumiem frustrację; warto byłoby mieć choćby importer, który np. z wzoru w programistycznej notacji, jak a * c - b * d, zrobi ładną formułę z cdot-ami.
Autokorekta nie jest stosowana w Math (poza tym działałaby także w innych modułach pakietu). Takoż nie funkcjonują autoteksty. Co się nasuwa, to napisać makropolecenie, które śledzi formułę i robi w niej porządki.
PS. rozumiem frustrację; warto byłoby mieć choćby importer, który np. z wzoru w programistycznej notacji, jak a * c - b * d, zrobi ładną formułę z cdot-ami.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Zmiana * na cdot
Autokorekta nie działa w Math, ale działa we Writerze. Można w nim napisać kod wzoru, zaznaczyć go i wybrać z menu tworzenie formuły — zostanie utworzona na podstawie zaznaczonego kodu. Co najwyżej później trzeba go przenieść/skopiować.
Przy czym Writer nie odróżnia gwiazdki nad 8 od gwiazdki na klawiaturze numerycznej, więc autokorekta musiałaby zamieniać wszystkie gwiazdki jak leci.
Prędzej dałoby się to zrobić na poziomie systemu operacyjnego. Na Linuksie gwiazdka nad 8 ma inny kod niż gwiazdka na klawiaturze numerycznej, więc można zmodyfikować mapę klawiszy w taki sposób, aby za pomocą tej drugiej wprowadzać tekst. Nie wiem jak na Windowsie. Ale znowu — to będzie działać wszędzie, a w Calcu może np. irytować.
Lub, tak jak pisze Jan, stworzyć makro które będzie zamieniać ten symbol kontekstowo.
Przy czym Writer nie odróżnia gwiazdki nad 8 od gwiazdki na klawiaturze numerycznej, więc autokorekta musiałaby zamieniać wszystkie gwiazdki jak leci.
Prędzej dałoby się to zrobić na poziomie systemu operacyjnego. Na Linuksie gwiazdka nad 8 ma inny kod niż gwiazdka na klawiaturze numerycznej, więc można zmodyfikować mapę klawiszy w taki sposób, aby za pomocą tej drugiej wprowadzać tekst. Nie wiem jak na Windowsie. Ale znowu — to będzie działać wszędzie, a w Calcu może np. irytować.
Lub, tak jak pisze Jan, stworzyć makro które będzie zamieniać ten symbol kontekstowo.
Mój blog o używaniu LibreOffice
LibreOffice 4.2.6, Debian testing amd64
LibreOffice 4.2.6, Debian testing amd64
Re: Zmiana * na cdot
Pierwsze podejście, które nie załatwia sprawy: globalna zamiana we wszystkich formułach w głównej części bieżącego dokumentu Writera (dokumenty Calc|Draw|Inpress mają inną strukturę, i do formuł dochodzi się nieco inaczej).
Basic
Python
Basic
Kod: Zaznacz cały
rem zmienia "*" na symbol "cdot" w formułach w bieżącym dokumencie
sub ast2cdot()
d = thisComponent
frames = d.EmbeddedObjects
for i = 0 to frames.Count-1
f = frames.getByIndex(i).Component
if f.ImplementationName = "com.sun.star.comp.math.FormulaDocument" then
f.Formula = replace(f.Formula, "*", " cdot ")
endif
next i
end sub
Kod: Zaznacz cały
def ast2cdot():
' zmienia "*" na symbol "cdot" w formułach w bieżącym dokumencie '
d = XSCRIPTCONTEXT.getDocument()
frames = d.EmbeddedObjects
for i in range(frames.Count):
f = frames.getByIndex(i).Component
if f.ImplementationName == "com.sun.star.comp.math.FormulaDocument":
f.Formula = f.Formula.replace("*", " cdot ")
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Zmiana * na cdot
Podejście drugie: technologia obsługi zdarzeń. W momencie dezaktywacji bloku formuły wszystkie wystąpienia * zamieniają się na cdot. Rzecz jasna, to tylko szkic pokazujący metodę, która powinna działać bardziej wybiórczo (np. zachować gwiazdki wewnątrz tekstów ujętych w cudzysłowy).
Basic
Python
Basic
Kod: Zaznacz cały
sub wlacz()
d = thisComponent
c = d.currentController
h = CreateUnoListener("my_","com.sun.star.view.XSelectionChangeListener")
c.addSelectionChangeListener(h)
end sub
sub my_SelectionChanged(evt)
ast2cdot(evt.Source.Selection)
end sub
sub my_disposing(evt)
' pusta
end sub
sub ast2cdot(s)
on error goto done
f = s.Component
if f.ImplementationName = "com.sun.star.comp.math.FormulaDocument" then
f.Formula = replace(f.Formula, "*", " cdot ")
end if
done:
end sub
Kod: Zaznacz cały
import uno
import unohelper
from com.sun.star.view import XSelectionChangeListener
class mySelectionChangeListener(unohelper.Base, XSelectionChangeListener):
def selectionChanged(self, evt):
ast2cdot(evt.Source.Selection)
def disposing(self, evt):
pass
def ast2cdot(sel):
try:
f = sel.Component
if f.ImplementationName == "com.sun.star.comp.math.FormulaDocument":
f.Formula = f.Formula.replace("*", " cdot ")
except:
pass
def wlacz():
d = XSCRIPTCONTEXT.getDocument()
c = d.getCurrentController()
h = mySelectionChangeListener()
c.addSelectionChangeListener(h)
g_exportedScripts = (wlacz,)
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)