考虑以下代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{newunicodechar}
\makeatletter
\newunicodechar{∑}{\@ifnextchar_{\sum}{\@ifnextchar^{\sum}{\Sigma}}}
\makeatother
\begin{document}
Incorrect ({\bf why?}):
\[
∑_1^{100} \qquad
∑_{100}^1 \qquad
∑
\]
Correct:
\makeatletter
\[
\@ifnextchar_{\sum}{\@ifnextchar^{\sum}{\Sigma}}_1^{100} \qquad
\@ifnextchar_{\sum}{\@ifnextchar^{\sum}{\Sigma}}^{100}_1 \qquad
\@ifnextchar_{\sum}{\@ifnextchar^{\sum}{\Sigma}}
\]
\makeatother
\end{document}
输出:
当我使用unicode符号“∑”时,输出符号是不可见的,但是,当我明确写出unicode符号“∑”的定义代码时,输出是正确的。
为什么?有解决办法吗?
答案1
newunicodechar
需要加载的包
\usepackage[utf8]{inputenc}
(也是inputenx
允许的)。出于各种原因,默认情况下不会加载它。确实
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{newunicodechar}
\makeatletter
\newunicodechar{∑}{\@ifnextchar_{\sum}{\@ifnextchar^{\sum}{\Sigma}}}
\makeatother
\begin{document}
\[
∑_1^{100} \qquad
∑^{100}_1 \qquad
∑
\]
\end{document}
将按预期工作。
如果您还加载,breqn
则必须注意它会更改_
和的类别代码^
,但仅限于文档开头。因此该定义不起作用,因为宏分别查找类别代码为 8 和 7 的_
和^
,但找不到它们。
解决这一问题需要一些技巧。下面是其中之一:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{newunicodechar}
\usepackage{breqn}
\makeatletter
\begingroup\lccode`?=`_ \lccode`!=`^
\def\x{\newunicodechar{∑}}
\lowercase{\expandafter\endgroup
\x{\@ifnextchar?{\sum}{\@ifnextchar!{\sum}{\Sigma}}}}
\makeatother
\begin{document}
\[
∑_1^{100} \qquad
∑^{100}_1 \qquad
∑
\]
\end{document}
但这是错误的。如果您想要大写的 sigma,则输入 U+03A3 希腊大写字母 SIGMA,而不是 U+2211 N-ARY SUMMATION。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{newunicodechar}
\usepackage{breqn}
\newunicodechar{∑}{\sum}
\newunicodechar{Σ}{\ensuremath{\Sigma}}
\begin{document}
\[
∑_1^{100} \qquad
∑^{100}_1 \qquad
Σ
\]
\end{document}