我偶尔会看到负数(数字只是负数,而不是减法)被排版为略细的负号,位于文本中心线上方。这是数学的正确符号吗?如何在 LaTeX 中排版?
编辑
我相信计算器给了我这个想法,但我在任何数学书中都找不到它。非常感谢大家的帮助,非常感谢。
感谢“Antal SZ”提供照片链接。
然而,问题仍然存在,我究竟该如何排版?
答案1
我的理解是,负号与减号相同,但由于它是一元运算符而不是二元运算符,因此间距不同。您可以在 TeX 中看到这一点:$-x$
间距与$y-x$
:
我不确定我能否回答你关于这是否正确的问题,但我要说的是,我从未见过数学排版时使用凸起的较小负号。(但对此持保留态度,因为我读到的大多数(但不是全部)数学都是用 LaTeX 排版的。)
答案2
如果 latex 给出的是二元减法,而您想要的是一元减法(即负数),只需在表达式周围添加花括号,例如更改-x
为{-x}
。请参阅帖子 #4数学帮助论坛
答案3
这是一个例子,但你仍然必须手动区分一元减法和二元减法:
\documentclass{minimal}
\usepackage{xparse}
\makeatletter
\NewDocumentCommand{\raisedminus}{m}{%
\raisebox{0.2em}{$\m@th#1{-}$}%
}
\NewDocumentCommand{\unaryminus}{}{%
\mathbin{%
\mathchoice{%
\raisedminus\scriptstyle
}{%
\raisedminus\scriptstyle
}{%
\raisedminus\scriptscriptstyle
}{%
\raisedminus\scriptscriptstyle
}%
}%
}
\makeatother
\begin{document}
$\unaryminus 3 - 4$
\end{document}
答案4
这是一个 LuaLaTeX 方法,可以自动发现一元减法(但\raisebox
由于我不明白的原因,它不起作用):
\documentclass{minimal}
\usepackage{luatextra}
\usepackage{xparse}
\makeatletter
\NewDocumentCommand{\raisedminus}{m}{%
\raisebox{0.2em}{$\m@th#1{-}$}%
}
\makeatother
\newsavebox{\scriptraisedminus}
\sbox{\scriptraisedminus}{\raisedminus{\scriptstyle}}
\newsavebox{\scriptscriptraisedminus}
\sbox{\scriptscriptraisedminus}{\raisedminus{\scriptscriptstyle}}
\begin{luacode}
local unary_minus = node.new(15)
unary_minus.display = node.new(16, 0)
unary_minus.display.nucleus = node.new(32)
unary_minus.display.nucleus.list = node.copy_list(tex.getbox(\number\scriptraisedminus))
unary_minus.text = node.new(16, 0)
unary_minus.text.nucleus = node.new(32)
unary_minus.text.nucleus.list = node.copy_list(tex.getbox(\number\scriptraisedminus))
unary_minus.script = node.new(16, 0)
unary_minus.script.nucleus = node.new(32)
unary_minus.script.nucleus.list = node.copy_list(tex.getbox(\number\scriptscriptraisedminus))
unary_minus.scriptscript = node.new(16, 0)
unary_minus.scriptscript.nucleus = node.new(32)
unary_minus.scriptscript.nucleus.list = node.copy_list(tex.getbox(\number\scriptscriptraisedminus))
function is_bin_conv_to_ord(v, p)
if not v or v.id \string~= 16 or v.subtype \string~= 4 then return false end
if not p then return true end
if p.id == 16 and ((p.subtype >= 1 and p.subtype <= 6) or p.subtype == 8) then return true end
local n = v.next
if q and q.id == 16 and (q.subtype == 5 or q.subtype == 7 or q.subtype == 8) then return true end
return false
end
function replace_unary_minus(head, displaytype, need_penalties)
local p = nil
local v = head
while v do
if is_bin_conv_to_ord(v, p) then
local n = v.nucleus
if n and n.id == 31 and n.fam == 2 and n.char == 0 then
node.insert_after(head, v, node.copy(unary_minus))
head, w = node.remove(head, v)
end
end
p = v
v = v.next
end
return node.mlist_to_hlist(head, displaytype, need_penalties)
end
luatexbase.add_to_callback("mlist_to_hlist", replace_unary_minus, "replace_unary_minus")
\end{luacode}
\begin{document}
$-3 - 4$
\end{document}