Вставка пробелов в уравнение в приложении R Shiny с mathjax

Я хотел бы создать блестящее приложение, в котором я отображал бы уравнения с помощью Mathjax. Но они выглядят не очень хорошо, потому что между членами уравнения нет пробелов. Вот мой код с уравнением внутри оператора renderText. Я использую уравнение в Shiny, но получаю код mathjax для рендеринга, помещая необработанное уравнение в документ R Markdown и используя функцию mathout библиотеки mathml для создания кода уравнения в функции. Возможно, это то, что я делаю неправильно.

library(shiny)

ui <- fluidPage(
        title = 'MathJax Examples',
        uiOutput('ex3'))

server <- function(input, output, session) {
             output$ex3 <- renderUI({
             withMathJax(
             renderText("$${610.70}{\\cdot}{\\exp{\\left[{\\left({17.38}{{}} 
                        {ta}\\right)}{/}{\\left({239.00}{+}{ta}\\right)}\\right]}}$$"))
})}

shinyApp(ui = ui, server = server)

Вывод выглядит следующим образом: 610,70⋅exp[(17,38ta)/(239,00+ta)]

Я понимаю, что на Stackoverflow есть подобные вопросы, но я не могу заставить их предложения работать. Я хотел бы получить вывод, который выглядит следующим образом:

610.70 * exp[(17.38 * ta)/(239.00 + ta)]

Я должен добавить, что получаю escape-ошибку, если использую одиночную обратную косую черту. Если я сделаю «\cdot» вместо «\cdot». например:

Error: '\c' is an unrecognized escape in character string 
(<input>:4:31)

\\ не подходит?

Jan 17.03.2024 15:58

Ошибка escape при использовании одной обратной косой черты является нормальной. Однако почему, например? \\ \\cdot \\ не подходит?

Jan 17.03.2024 16:09

Вы должны быть более конкретными и привести пример. Я не знаю, что ты имеешь в виду.

user8229029 17.03.2024 16:29

Я понимаю ваш вопрос так, что вы спрашиваете, как вставлять пробелы, например. между \\cdot так, что это похоже на 610.70 * exp, а не на 610.70*exp. Команда для такого пробела — две обратные косые черты, за которыми следует один пробел, поэтому в таком случае можно использовать 610.70 \\ \\cdot \\ \\exp.

Jan 17.03.2024 16:32

Да я вижу. Есть ли какое-нибудь приложение или инструмент, который мог бы создать это для меня?

user8229029 17.03.2024 16:40

Давайте продолжим обсуждение в чате.

user8229029 17.03.2024 16:43

Я не понимаю. Вам нужно приложение или инструмент для вставки буквенного текста в середину другого буквенного текста в вашем коде? Вы можете просто поставить sub("\\\\cdot", "\\\\ \\\\cdot \\\\", your_existing_string) или gsub, если есть два или более cdot.

r2evans 17.03.2024 16:55

Помимо "\\ " (который создает обратную косую черту), в LaTeX есть несколько других команд пробелов для пробелов разного размера. Я думаю, что MathJax их поддерживает. Список см. в разделе «Команды пробелов» в разделе 7 на этой странице: latex-tutorial.com/latex-space

user2554330 17.03.2024 17:57

Это для более чем 250 уравнений (некоторые из которых в 20+ раз превышают размер примера, который я использовал), для гораздо большего количества строк, чем cdot, некоторые из которых показаны в моем примере, включая пробелы между всеми математическими символами и значениями и т. д. Я хотел бы создать приложение Shiny, которое отображало бы уравнения в удобном формате, а не просто текст.

user8229029 17.03.2024 19:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема в том, что вы заключаете все свои операторы в фигурные скобки, что говорит MathJax не применять к ним обычные правила пробелов. Не делайте этого, используйте "\\cdot" вместо "{\\cdot}" и т. д. Например, эта версия вашего примера выглядит нормально:

library(shiny)

ui <- fluidPage(
  title = 'MathJax Examples',
  uiOutput('ex3'))

server <- function(input, output, session) {
  output$ex3 <- renderUI({
    withMathJax(
      renderText("$${610.70}\\cdot{\\exp{\\left[{\\left({17.38}* 
                        {ta}\\right)}{/}{\\left({239.00}+{ta}\\right)}\\right]}}$$"))
  })}

shinyApp(ui = ui, server = server)

Я понимаю это:

Я считаю, что скобки вокруг цифр и ta не нужны, но безвредны.

В комментарии вы сказали, что у вас более 250 уравнений. Вносить эти изменения вручную было бы утомительно, но если они есть где-то в тексте, вы можете последовать совету @r2evans и использовать gsub() в файле. Например, если уравнения находятся в символьной переменной lines, это исправит все операторы \\cdot, «+» и «*»:

lines <- gsub("{\\cdot}", "\\cdot", lines, fixed = TRUE)
lines <- gsub("{+}", "+", lines, fixed = TRUE)
lines <- gsub("{*}", "*", lines, fixed = TRUE)
Ответ принят как подходящий

Я настоятельно не советую вручную возиться с пробелами в математическом уравнении (если вы точно не знаете, что делаете): в общем, MathJax знает лучше вас.

Это означает: удалите все скобки из вашего уравнения: они говорят MathJax не применять обычные правила пробелов. Фигурные скобки необходимы только для группировки подвыражений, чтобы переопределить обычные правила приоритета операторов. В вашем случае это не применимо.

Кроме того, обычно рекомендуется использовать \middle/ вместо простого / для отображения дроби солидуса — по той же причине, что и использование \left(…\right) вместо простого (…) (хотя в вашем случае это не имеет значения). Альтернативно, используйте \frac{…}{…} для сложенной дроби.

Сравните (нажмите Run code snippet ниже, чтобы увидеть результат):

<script type = "text/javascript" async src = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>

Original:

$${610.70}{\cdot}{\exp{\left[{\left({17.38}{{}} 
                    {ta}\right)}{/}{\left({239.00}{+}{ta}\right)}\right]}}$$

Corrected:

$$
  610.70 \cdot \exp{\left[
    \left( 17.38 ta \right) \middle/
    \left( 239.00 + ta \right)
  \right]}
$$

Using stacked fraction:

$$
  610.70 \cdot \exp \frac{17.38 ta}{239.00 + ta}
$$

В версии со сложенной дробью я получаю следующее: Ошибка: неожиданный '$' в: " withMathJax(renderText($). Я использую это в Shiny, так что, возможно, есть разница в том, как это выполняется здесь. Я не не знаю - я учусь здесь.

user8229029 18.03.2024 20:22

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