В Microsoft Word существует два способа отобразить уравнения; Встроенный и Дисплей. Встроенное уравнение соответствует тексту (как имя предполагает), так, чтобы уравнения и текст могли быть смешаны. Уравнение дисплея появляется на своей собственной строке и автоматически центрируется, как так:
Это три отдельных уравнения, но потому что они установлены на режим отображения, они все кажутся центрируемыми и на их собственной строке. Если их режим изменяется для встраивания, они все кажутся на той же строке и не центрируемыми вместо этого:
Моя проблема состоит в том, что LibreOffice показывает все уравнения с помощью встроенного режима, даже если они установлены на режим отображения в docx файле. Если я создаю первый пример с помощью уравнений режима отображения Word, сохраняю его и затем открываю его в LibreOffice, уравнения появляются, как будто они - встроенный режим:
Существуют ли настройки, которые я могу изменить, чтобы заставить уравнения режима отображения быть на их собственных строках и центрируются, как они находятся в Word? Из-за чистого количества документов Word я имею, я не изменил бы документы индивидуально.
В противном случае существует ли альтернативный текстовой процессор, который отображает уравнения правильно?
Когда формула вставляется в LibreOffice, она привязывается As Character
по умолчанию.
Это означает, что ведет себя то же, как символы делают. Таким образом, мы рассматриваем его тот же путь, как будто у нас было три символа, например, "abc" вместо трех уравнений.
Теперь, все три уравнения центрируются и на отдельных строках.
Вот результат этих инструкций для примера "abc", показывая, что формулы ведут себя то же как символы. (Нажатие Enter, автоматически корректируемого к верхнему регистру).
Для создания этой работы и в MS Word и в LibreOffice, возможно, используйте установку Inline только. Однако у меня нет копии MS Word для проверки этого, и Word Online не может отредактировать формулы (но может отобразить их, если это - все, в чем Вы нуждаетесь).
Существует ли альтернативный текстовой процессор, который использует формулу Дисплея, устанавливающую, как MS Word делает? Вполне возможно; существует много альтернатив, или заплаченных или свободных. Независимо от того, что альтернатива, которую Вы выбираете, тем не менее, будет несовместимостями некоторого вида.
Я признал, что маловероятно, что существует Текстовой процессор с этой функциональностью для Linux, таким образом, я решил автоматизировать ответ K Jim путем создания сценария Ruby.
Источник проблемы - то, что LibreOffice игнорирует m:oMathPara
Элемент XML, который является также что Переходы на новую строку уравнение режима отображения в центрировать его и поместить его в его собственный абзац.
Сценарий Ruby ниже пользуется библиотекой парсинга Nokogiri XML для замены всех происшествий m:oMathPara
со стандартом w:p
абзацы, которые также отформатированы, чтобы быть выровненными центром. Это делает следующее:
/tmp
, разархивировал его и открывается document.xml
m:oMathPara
элементыw:p
элементы/tmp
Это не было протестировано очень, таким образом, необходимо создать резервную копию любых файлов, Вы используете его на на всякий случай. Обратите внимание, что это будет только работать над 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