LibreOffice не корректно отображает «Текстовые уравнения» в режиме отображения; есть ли текстовый процессор Linux, который может?

Использовать драйвер blueman:

sudo apt install blueman

Чтобы перевести jaybird в правильный режим сопряжения, вы должны отключить их, затем удерживайте кнопку питания до тех пор, пока она не включится, И начнет сопряжение. [!d1 ]

3
задан 27 February 2018 в 21:09

6 ответов

Когда формула вставляется в LibreOffice, она становится привязанной As Character по умолчанию.

Это означает, что она ведет себя так же, как и символы. Таким образом, мы обрабатываем его так же, как если бы у нас было три символа, например «abc», а не три уравнения.

Формат -> Выровнять -> Центр. Переместите курсор после первого уравнения и нажмите Enter. Повторите шаг 2 для второго уравнения.

Теперь все три уравнения центрированы и на отдельных строках.

Вот результат этих инструкций для " abc ", показывая, что формулы ведут себя так же, как символы. (Нажатие Enter автоматически скорректировано на верхний регистр «A»).

anchor as character

Чтобы сделать эту работу как в MS Word, так и в LibreOffice, возможно, используйте Inline установка только. Тем не менее, у меня нет копии MS Word, чтобы проверить это, и Word Online не может редактировать формулы (но может отображать их, если это все, что вам нужно).

Есть ли альтернативный текстовый процессор, который использует Настройка строки Inline , как это делает MS Word? Вполне возможно; существует ряд альтернатив, оплачиваемых или свободных. Однако, какая бы альтернатива вы ни выбрали, будут какие-то несовместимости.

5
ответ дан 22 May 2018 в 12:56
  • 1
    Хотя это действительно работает, для этого требуется, чтобы документы были изменены, что на самом деле не идеально; У меня есть документы Word на два года с использованием уравнений Display-mode, и теперь я пытаюсь переключиться на Linux. Тем не менее, благодарю вас за подробный ответ. – Aaron Christiansen 25 February 2018 в 19:55
  • 2
    Этот ответ, кажется, единственный путь, поэтому я автоматизировал его в скрипт Ruby (см. Мой ответ). Большое спасибо за то, что указали мне в правильном направлении! – Aaron Christiansen 27 February 2018 в 21:10

Когда формула вставляется в LibreOffice, она становится привязанной As Character по умолчанию.

Это означает, что она ведет себя так же, как и символы. Таким образом, мы обрабатываем его так же, как если бы у нас было три символа, например «abc», а не три уравнения.

Формат -> Выровнять -> Центр. Переместите курсор после первого уравнения и нажмите Enter. Повторите шаг 2 для второго уравнения.

Теперь все три уравнения центрированы и на отдельных строках.

Вот результат этих инструкций для " abc ", показывая, что формулы ведут себя так же, как символы. (Нажатие Enter автоматически скорректировано на верхний регистр «A»).

anchor as character [!d3]

Чтобы сделать эту работу как в MS Word, так и в LibreOffice, возможно, используйте Inline установка только. Тем не менее, у меня нет копии MS Word, чтобы проверить это, и Word Online не может редактировать формулы (но может отображать их, если это все, что вам нужно).

Есть ли альтернативный текстовый процессор, который использует Настройка строки Inline , как это делает MS Word? Вполне возможно; существует ряд альтернатив, оплачиваемых или свободных. Однако, какая бы альтернатива вы ни выбрали, будут какие-то несовместимости.

5
ответ дан 17 July 2018 в 20:10

Когда формула вставляется в LibreOffice, она становится привязанной As Character по умолчанию.

Это означает, что она ведет себя так же, как и символы. Таким образом, мы обрабатываем его так же, как если бы у нас было три символа, например «abc», а не три уравнения.

Формат -> Выровнять -> Центр. Переместите курсор после первого уравнения и нажмите Enter. Повторите шаг 2 для второго уравнения.

Теперь все три уравнения центрированы и на отдельных строках.

Вот результат этих инструкций для " abc ", показывая, что формулы ведут себя так же, как символы. (Нажатие Enter автоматически скорректировано на верхний регистр «A»).

anchor as character [!d3]

Чтобы сделать эту работу как в MS Word, так и в LibreOffice, возможно, используйте Inline установка только. Тем не менее, у меня нет копии MS Word, чтобы проверить это, и Word Online не может редактировать формулы (но может отображать их, если это все, что вам нужно).

Есть ли альтернативный текстовый процессор, который использует Настройка строки Inline , как это делает MS Word? Вполне возможно; существует ряд альтернатив, оплачиваемых или свободных. Однако, какая бы альтернатива вы ни выбрали, будут какие-то несовместимости.

5
ответ дан 23 July 2018 в 20:54

Я признал, что вряд ли есть текстовый процессор с этой функциональностью для Linux, поэтому я решил автоматизировать ответ Jim K, создав скрипт Ruby.

Происхождение проблемы состоит в том, что LibreOffice игнорирует XML-элемент m:oMathPara, который также является тем, что Word обертывает уравнение режима отображения в центре и помещает его в свой собственный параграф.

В сценарии Ruby ниже используется библиотека разбора XML Nokogiri, чтобы заменить все вхождения m:oMathPara на стандартные параграфы w:p, которые также отформатированы для выравнивания по центру. Он выполняет следующие действия:

Копирует DOCX (указанный как аргумент командной строки) в /tmp, распаковывает его и открывает document.xml. Проверяет XML для элементов m:oMathPara. Заменяет их форматированием [ f8]. Закрепляет DOCX в /tmp. Открывает полученный DOCX в LibreOffice. спрашивает, хочет ли пользователь сохранить изменения; если они ответят «да», преобразованный DOCX будет скопирован поверх оригинала, чтобы перезаписать его

. Это не было протестировано много, поэтому вам необходимо создать резервную копию любых файлов, которые вы используете на всякий случай. Обратите внимание, что он будет работать только в Linux и требует установки инструмента unzip. (Это вселенная, если у вас ее нет: sudo apt install unzip.) Возможно, вам также понадобится gem install nokogiri.

    #!/usr/bin/ruby
# THIS IS LINUX ONLY!
# You'll also need to install `unzip`:
#     sudo apt install unzip

require "pp"
require "zip"
require "fileutils"
require "nokogiri"

def error(msg)
    puts msg
    exit
end

temp_dir = "/tmp/dispeqfix/"

filename = ARGV[0]

error "Please pass a filename as an argument." if filename.nil?

# Remove the directory if this tool has been run before
FileUtils.remove_dir(temp_dir) if Dir.exist? temp_dir

# Extract file as a zip
%x{unzip '#{filename}' -d '#{temp_dir}'}

# Get path to document.xml, the file we need to modify
document_path = "/tmp/dispeqfix/word/document.xml"
error "document.xml not found - are you sure this file is a DOCX?" unless File.exist? document_path

xml = Nokogiri::XML(File.read(document_path))

# 'm:oMathPara' is the element which LibreOffice doesn't support
xml.search("//m:oMathPara").each do |math_para|
    # Get the paragraph containing this one
    parent_para = math_para.parent

    # Get the 'm:oMath' contained within the 'm:oMathPara'
    math_para.dup.children.each do |math|
        # Insert a new paragraph with contains the 'm:oMath'
        new_para = Nokogiri::XML::Node.new("w:p", xml)
        math.parent = new_para
        parent_para.after(new_para)

        # Centre the paragraph
        math.before("<w:pPr><w:jc w:val=\"center\"/><w:rPr/></w:pPr><w:r><w:rPr/></w:r>")
    end

    math_para.remove
end

# Write this temporary file
File.write(document_path, xml.to_xml)

# Re-zip and open it
%x{ cd /tmp/dispeqfix; zip -r ../dispeqfix.docx * }
preview = spawn("libreoffice --writer /tmp/dispeqfix.docx 2>&1 > /dev/null", out: File::NULL)
Process.detach(preview)

# Prompt for overwrite
print "Would you like to overwrite the original document with this one? [y/n] "
if $stdin.gets.chomp == "y"
    %x{ cp -f /tmp/dispeqfix.docx #{filename} }
    puts "Overwritten."
else
    puts "No change made."
end
3
ответ дан 22 May 2018 в 12:56

Я признал, что вряд ли есть текстовый процессор с этой функциональностью для Linux, поэтому я решил автоматизировать ответ Jim K, создав скрипт Ruby.

Происхождение проблемы состоит в том, что LibreOffice игнорирует XML-элемент m:oMathPara, который также является тем, что Word обертывает уравнение режима отображения в центре и помещает его в свой собственный параграф.

В сценарии Ruby ниже используется библиотека разбора XML Nokogiri для замены всех вхождений m:oMathPara на стандартные параграфы w:p, которые также отформатированы для выравнивания по центру. Он выполняет следующие действия:

Копирует DOCX (указанный как аргумент командной строки) в /tmp, распаковывает его и открывает document.xml. Проверяет XML для элементов m:oMathPara. Заменяет их форматированием w:p. Закрепляет DOCX в /tmp. Открывает полученный DOCX в LibreOffice. спрашивает, хочет ли пользователь сохранить изменения; если они ответят «да», преобразованный DOCX будет скопирован поверх оригинала, чтобы перезаписать его

. Это не было протестировано много, поэтому вам необходимо создать резервную копию любых файлов, которые вы используете на всякий случай. Обратите внимание, что он будет работать только в Linux и требует установки инструмента unzip. (Это вселенная, если у вас ее нет: sudo apt install unzip.) Возможно, вам также понадобится gem install nokogiri.

#!/usr/bin/ruby # THIS IS LINUX ONLY! # You'll also need to install `unzip`: # sudo apt install unzip require "pp" require "zip" require "fileutils" require "nokogiri" def error(msg) puts msg exit end temp_dir = "/tmp/dispeqfix/" filename = ARGV[0] error "Please pass a filename as an argument." if filename.nil? # Remove the directory if this tool has been run before FileUtils.remove_dir(temp_dir) if Dir.exist? temp_dir # Extract file as a zip %x{unzip '#{filename}' -d '#{temp_dir}'} # Get path to document.xml, the file we need to modify document_path = "/tmp/dispeqfix/word/document.xml" error "document.xml not found - are you sure this file is a DOCX?" unless File.exist? document_path xml = Nokogiri::XML(File.read(document_path)) # 'm:oMathPara' is the element which LibreOffice doesn't support xml.search("//m:oMathPara").each do |math_para| # Get the paragraph containing this one parent_para = math_para.parent # Get the 'm:oMath' contained within the 'm:oMathPara' math_para.dup.children.each do |math| # Insert a new paragraph with contains the 'm:oMath' new_para = Nokogiri::XML::Node.new("w:p", xml) math.parent = new_para parent_para.after(new_para) # Centre the paragraph math.before("<w:pPr><w:jc w:val=\"center\"/><w:rPr/></w:pPr><w:r><w:rPr/></w:r>") end math_para.remove end # Write this temporary file File.write(document_path, xml.to_xml) # Re-zip and open it %x{ cd /tmp/dispeqfix; zip -r ../dispeqfix.docx * } preview = spawn("libreoffice --writer /tmp/dispeqfix.docx 2>&1 > /dev/null", out: File::NULL) Process.detach(preview) # Prompt for overwrite print "Would you like to overwrite the original document with this one? [y/n] " if $stdin.gets.chomp == "y" %x{ cp -f /tmp/dispeqfix.docx #{filename} } puts "Overwritten." else puts "No change made." end
3
ответ дан 17 July 2018 в 20:10

Я признал, что вряд ли есть текстовый процессор с этой функциональностью для Linux, поэтому я решил автоматизировать ответ Jim K, создав скрипт Ruby.

Происхождение проблемы состоит в том, что LibreOffice игнорирует XML-элемент m:oMathPara, который также является тем, что Word обертывает уравнение режима отображения в центре и помещает его в свой собственный параграф.

В сценарии Ruby ниже используется библиотека разбора XML Nokogiri, чтобы заменить все вхождения m:oMathPara на стандартные параграфы w:p, которые также отформатированы для выравнивания по центру. Он выполняет следующие действия:

Копирует DOCX (указанный как аргумент командной строки) в /tmp, распаковывает его и открывает document.xml. Проверяет XML для элементов m:oMathPara. Заменяет их форматированием w:p. Закрепляет DOCX в /tmp. Открывает полученный DOCX в LibreOffice. спрашивает, хочет ли пользователь сохранить изменения; если они ответят «да», преобразованный DOCX будет скопирован поверх оригинала, чтобы перезаписать его

. Это не было протестировано много, поэтому вам необходимо создать резервную копию любых файлов, которые вы используете на всякий случай. Обратите внимание, что он будет работать только в Linux и требует установки инструмента unzip. (Это вселенная, если у вас ее нет: sudo apt install unzip.) Возможно, вам также понадобится gem install nokogiri.

#!/usr/bin/ruby # THIS IS LINUX ONLY! # You'll also need to install `unzip`: # sudo apt install unzip require "pp" require "zip" require "fileutils" require "nokogiri" def error(msg) puts msg exit end temp_dir = "/tmp/dispeqfix/" filename = ARGV[0] error "Please pass a filename as an argument." if filename.nil? # Remove the directory if this tool has been run before FileUtils.remove_dir(temp_dir) if Dir.exist? temp_dir # Extract file as a zip %x{unzip '#{filename}' -d '#{temp_dir}'} # Get path to document.xml, the file we need to modify document_path = "/tmp/dispeqfix/word/document.xml" error "document.xml not found - are you sure this file is a DOCX?" unless File.exist? document_path xml = Nokogiri::XML(File.read(document_path)) # 'm:oMathPara' is the element which LibreOffice doesn't support xml.search("//m:oMathPara").each do |math_para| # Get the paragraph containing this one parent_para = math_para.parent # Get the 'm:oMath' contained within the 'm:oMathPara' math_para.dup.children.each do |math| # Insert a new paragraph with contains the 'm:oMath' new_para = Nokogiri::XML::Node.new("w:p", xml) math.parent = new_para parent_para.after(new_para) # Centre the paragraph math.before("<w:pPr><w:jc w:val=\"center\"/><w:rPr/></w:pPr><w:r><w:rPr/></w:r>") end math_para.remove end # Write this temporary file File.write(document_path, xml.to_xml) # Re-zip and open it %x{ cd /tmp/dispeqfix; zip -r ../dispeqfix.docx * } preview = spawn("libreoffice --writer /tmp/dispeqfix.docx 2>&1 > /dev/null", out: File::NULL) Process.detach(preview) # Prompt for overwrite print "Would you like to overwrite the original document with this one? [y/n] " if $stdin.gets.chomp == "y" %x{ cp -f /tmp/dispeqfix.docx #{filename} } puts "Overwritten." else puts "No change made." end
3
ответ дан 23 July 2018 в 20:54

Другие вопросы по тегам:

Похожие вопросы: