Создание документа LaTeX в приложении C # / WPF

#c# #wpf #latex #pdflatex

#c# #wpf #Латекс #pdflatex

Вопрос:

Кто-нибудь когда-нибудь создавал документ .pdf в своем приложении C # / WPF с использованием LaTeX? Мы создаем отчеты и выводим их на экран, и мы рассмотрели возможность создания отчетов с использованием HTML и LaTeX. Вариант HTML прост, но создание документа LaTeX в C # кажется нетривиальным, что лично я нахожу немного странным; Я бы подумал, что люди делали это много раз раньше. Кто-нибудь знает о каких-либо библиотеках LaTeX для просмотра или о каком-либо другом способе сделать это?

Комментарии:

1. Планируете ли вы на самом деле разметить документ TeX или также выполнить обработку для получения pdf?

2. Что вы подразумеваете под нетривиальным? Создание документа LaTeX, являющегося текстовым форматом, не сложнее, чем создание документа HTML. Создание PDF-файла на основе выходных данных является тривиальным, с использованием процессора LaTeX. Поэтому, пожалуйста, уточните, с каким из шагов у вас возникли проблемы.

3. Я не уверен в том, как действовать в части «использование процессора LaTeX». Я довольно новичок в использовании LaTeX в целом. Я использовал его в одной или двух статьях, но я делал это в среде IDE, и поэтому у меня мало опыта работы с частью «компиляция и создание PDF». Я знаю, что, конечно, создать фактический текст файла было бы так же просто, как создать HTML-файл, но я не уверен, что мне нужно для создания PDF-документа в самом приложении («в фоновом режиме»).

4. Я установил полную версию MiKTeX 2.8 на каждый клиентский компьютер и динамически сгенерировал исходный текст .tex, а затем дважды вызвал компилятор для хорошей оценки. Это занимает несколько секунд, это изящно, но подходит для моих целей, хотя у вас это может не сработать.

Ответ №1:

Я работал над портом C # библиотеки iosMath LaTeX на C #. Когда я пишу это, в большинстве случаев это дает хорошие результаты. Я работаю над оставшимися.

https://github.com/verybadcat/CSharpMath/tree/master

Ответ №2:

Я не знаю ни о каких библиотеках LaTeX, и, как вы сказали, это не кажется тривиальным, что я также нахожу немного странным. Я всегда писал документы сам, используя среду IDE TeXnic Center, которую я нашел действительно полезной.

Вы всегда могли бы попробовать записать исходный код документа в файл с помощью StreamWriter, а затем запустить новый процесс pdflatex через командную строку в коде, чтобы скомпилировать документ в pdf?

Кроме этого, мне удалось наткнуться на список библиотек, генерирующих PDF с открытым исходным кодом для C #, на которые, возможно, стоит взглянуть здесь (к сожалению, я не думаю, что какая-либо из них предназначена для LaTeX):

http://en.csharp-online.net/Open_Source_PDF_Libraries

Похоже, что iTextSharp довольно часто рекомендуется людьми, поэтому, возможно, стоит взглянуть на это. Надеюсь, кто-нибудь другой сможет указать вам на библиотеку LaTeX, но если они не могут и запуск pdflatex как процесса через ваш код нежизнеспособен, то, по крайней мере, это может дать вам достойную альтернативу.

Надеюсь, это поможет.

Ответ №3:

Эта библиотека C # ‘KaTeX Sharp Runner’ может анализировать необработанные строки LaTeX или выражения в тексте markdown. Он оборачивает библиотеку JavaScript KaTeX для использования в приложениях .NET с использованием Jint.

https://github.com/appsoftwareltd/katex-sharp-runner

Ответ №4:

Я создаю текст Latex на C #, который затем компилирую с помощью процесса.Запустите() с pdfLatex.exe . Я создал несколько подпрограмм для более простого (и менее подверженного ошибкам) построения уравнений и таблиц параметров в стиле

 length   2.3 m
mass    45.5 kg 
  

Без этих процедур и просто на C # записать уравнение в виде длинной строки Latex со всеми ее запятыми, (фигурными) скобками и т.д. — это ад.

Интернационализируемое уравнение в моей программе выглядит следующим образом:

 Equation
 (
   "equation_name_in_Swahili",
      new List<string[]>{
      new[] {$"F_{{{Str("cable")}}}", null}, eq,
      new[] {"\sqrt", "\sqrt"},
      curl1,
      new[] {"(", "("},
      new[] {$"F_{{{ltxGrav},X}}", $"{Fg * Math.Cos(Ag):G5}"},
      plus,
      new[] {$"F_{{{ltxWind},X}}", $"{Fw * Math.Cos(Aw):G5}"},
      new[] {")", ")"},
      new[] {"^2", "^2"},
      plus,
      new[] {$"F_{{{ltxGrav},Y}}^2", $"{Fg * Math.Sin(Ag):G5}^2"},
      plus,
      new[] {$"F_{{{ltxWind},Z}}^2", $"{Fw * Math.Cos(Aw):G5}^2"},
      curl2
  }
)
  

первый столбец представляет собой уравнение с формальными именами параметров, а второй такой же, но со значениями. Вы можете догадаться, что означают «плюс» и «точки».