Я признал, что вряд ли есть текстовый процессор с этой функциональностью для 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
После многих поисков и попыток я наконец придумал решение!
Вот как сжечь ISO (ы) Windows PE от Gandalf с помощью Ubuntu.
Подготовить USB используя GParted: msdos - fat32 / ntfs - check (boot) в флагом раздела Установите ISO с помощью Unetbootin. Сделайте его загрузочнымsudo grub-install --target=i386-pc --boot-directory="/media/<username>/<drive_label>/boot" /dev/sdX
Замените: /media/<username>/<drive_label> на путь, на котором установлен USB-накопитель, /dev/sdX с USB-накопителем, а не на раздел (например, /dev/sdb not /dev/sdb1) Создайте файл с именем grub.cfg в USB-накопитель в папке /boot/grub: добавьте следующий текст в файл grub.cfg: - default=1
timeout=15
color_normal=light-cyan/dark-gray
menu_color_normal=black/light-cyan
menu_color_highlight=white/black
menuentry "Start Windows Installation" {
insmod ntfs
insmod search_label
search --no-floppy --set=root --label <USB_drive_label> --hint hd0,msdos1
ntldr /bootmgr
boot
}
menuentry "Boot from the first hard drive" {
insmod ntfs
insmod chain
insmod part_msdos
insmod part_gpt
set root=(hd1)
chainloader +1
boot
}
И все!
Загрузитесь с USB в старой загрузке, и вы загрузитесь из Windows в режиме реального времени, не устанавливая его.
После многих поисков и попыток я наконец придумал решение!
Вот как сжечь ISO (ы) Windows PE от Gandalf с помощью Ubuntu.
Подготовить USB используя GParted: msdos - fat32 / ntfs - check (boot) в флагом раздела Установите ISO с помощью Unetbootin. Сделайте его загрузочнымsudo grub-install --target=i386-pc --boot-directory="/media/<username>/<drive_label>/boot" /dev/sdX
Замените: /media/<username>/<drive_label> на путь, на котором установлен USB-накопитель, /dev/sdX с USB-накопителем, а не на раздел (например, /dev/sdb not /dev/sdb1) Создайте файл с именем grub.cfg в USB-накопитель в папке /boot/grub: добавьте следующий текст в файл grub.cfg: - default=1
timeout=15
color_normal=light-cyan/dark-gray
menu_color_normal=black/light-cyan
menu_color_highlight=white/black
menuentry "Start Windows Installation" {
insmod ntfs
insmod search_label
search --no-floppy --set=root --label <USB_drive_label> --hint hd0,msdos1
ntldr /bootmgr
boot
}
menuentry "Boot from the first hard drive" {
insmod ntfs
insmod chain
insmod part_msdos
insmod part_gpt
set root=(hd1)
chainloader +1
boot
}
И все!
Загрузитесь с USB в старой загрузке, и вы загрузитесь из Windows в режиме реального времени, не устанавливая его.
После многих поисков и попыток я наконец придумал решение!
Вот как сжечь ISO (ы) Windows PE от Gandalf с помощью Ubuntu.
Подготовить USB используя GParted: msdos - fat32 / ntfs - check (boot) в флагом раздела Установите ISO с помощью Unetbootin. Сделайте его загрузочнымsudo grub-install --target=i386-pc --boot-directory="/media/<username>/<drive_label>/boot" /dev/sdX
Замените: /media/<username>/<drive_label> на путь, на котором установлен USB-накопитель, /dev/sdX с USB-накопителем, а не на раздел (например, /dev/sdb not /dev/sdb1) Создайте файл с именем grub.cfg в USB-накопитель в папке /boot/grub: добавьте следующий текст в файл grub.cfg: - default=1
timeout=15
color_normal=light-cyan/dark-gray
menu_color_normal=black/light-cyan
menu_color_highlight=white/black
menuentry "Start Windows Installation" {
insmod ntfs
insmod search_label
search --no-floppy --set=root --label <USB_drive_label> --hint hd0,msdos1
ntldr /bootmgr
boot
}
menuentry "Boot from the first hard drive" {
insmod ntfs
insmod chain
insmod part_msdos
insmod part_gpt
set root=(hd1)
chainloader +1
boot
}
И все!
Загрузитесь с USB в старой загрузке, и вы загрузитесь из Windows в режиме реального времени, не устанавливая его.