Нежелательное дополнительное пространство макросом \newcommand в MathJax

Когда я использую макрос LaTeX (например, \newcommand), он занимает место на странице. Вот пример кода, демонстрирующий проблему, с которой я столкнулся.

URL-адрес: http://jsfiddle.net/Lkeus/

Код:

<!DOCTYPE html> 
<html> 
<head> 
<title>MathJax Example</title> 
<script 
type="text/javascript" 
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"> 
</script> 
</head> 
<body> 
<p> 
\(\newcommand{\N}{\mathbb{N}}\) 
\(\newcommand{\R}{\mathbb{R}}\) 
\(\newcommand{\Z}{\mathbb{Z}}\) 
Let \(x \in \N\). Then \(x^2\) is called a perfect square. 
</p> 
<p> 
Let \(x \in \N\). Then \(x^2\) is called a perfect square. 
</p> 
</body> 
</html> 

Вот вывод на отдельной странице: http://fiddle.jshell.net/Lkeus/show/< /а>

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

<span class="math" id="MathJax-Span-1"> 
<span style="display: inline-block; position: relative; width: 0em; 
height: 0pt; font-size: 130%;"> 
<span style="position: absolute; top: -1em; left: 0em; clip: 
rect(0.856em, 1000em, 1.144em, -0.433em);"> 
<span class="mrow" id="MathJax-Span-2"></span> 
<span style="display: inline-block; width: 0pt; height: 1em;"></span> 
</span></span> 
<span style="border-left: 0em solid; display: inline-block; overflow: 
hidden; width: 0pt; height: 0em; vertical-align: 0em;"></span></span>

Как я могу избавиться от этого лишнего пространства?


person Lone Learner    schedule 16.02.2012    source источник
comment
Примечание из будущего: срок службы cdn.mathjax.org подходит к концу, проверьте mathjax. org/cdn-shutting-down для советов по миграции (и, возможно, обновите свой пост для будущих читателей).   -  person Peter Krautzberger    schedule 21.04.2017


Ответы (2)


Я узнал несколько решений этой проблемы от сообщества MathJax.

Можно минимизировать пробелы из-за \newcommand, поместив все \newcommand в один \(...\). Пример: http://jsfiddle.net/qQ9P9/

\(\newcommand{\N}{\mathbb{N}}
\newcommand{\R}{\mathbb{R}}
\newcommand{\Z}{\mathbb{Z}}\)

Можно полностью удалить все лишние пробелы, определив макросы в разделе <head> HTML. Пример: http://jsfiddle.net/tVyJz/

<script type="text/x-mathjax-config"> 
MathJax.Hub.Config({ 
    TeX: { 
        Macros: { 
            N: "\\mathbb{N}", 
            R: "\\mathbb{R}", 
            Z: "\\mathbb{Z}" 
        } 
    } 
}); 
</script> 
person Lone Learner    schedule 20.02.2012
comment
FWIW, у этого есть по крайней мере один недостаток: вы не можете использовать аргументы с разделителями в стиле \def таким образом, поскольку все, что вы можете сказать, это то, сколько аргументов принимает ваш макрос. Поэтому использование \def в тексте более гибко. - person Luke Maurer; 01.04.2014

Что я делал, так это помещал определения newcommand в их собственный абзац (или div), а затем устанавливал для атрибута display значение none:

<p style="display:none"> 
\(\newcommand{\N}{\mathbb{N}}\) 
\(\newcommand{\R}{\mathbb{R}}\) 
\(\newcommand{\Z}{\mathbb{Z}}\) 
</p>
<p>
Let \(x \in \N\). Then \(x^2\) is called a perfect square. 
</p> 
<p> 
Let \(x \in \N\). Then \(x^2\) is called a perfect square. 
</p> 
person I. J. Kennedy    schedule 23.01.2014