负片与减片的排版?

负片与减片的排版?

我偶尔会看到负数(数字只是负数,而不是减法)被排版为略细的负号,位于文本中心线上方。这是数学的正确符号吗?如何在 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}

输出

相关内容