ucs 与 DeclareUnicodeChar 冲突?

ucs 与 DeclareUnicodeChar 冲突?

我被迫使用latex,并想在数学中使用unicode字符。所以我写道:

\documentclass{article}
\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{B7}{\cdot}
\usepackage[mathletters]{ucs}
\begin{document}
$a · b$
\end{document}

但它给出了:

aΔb

DeclareUnicodeChars之后还有什么办法吗ucs


ucs手册有以下说明DeclareUnicodeChars

Several options have a special hardcoded meaning:
...
Every character you define in your document using \DeclareUnicodeCharacter
has the option document. This option is activated per
default having the priority 1000, therefore manually declared characters take
precedence over all other characters, unless some other option has explicitly
gotten a higher priority.
...

所以我尝试了我理解的方式:

\DeclareUnicodeCharacter[document]{B7}{\cdot}

\DeclareUnicodeCharacter{B7}[document]{\cdot}

但它不起作用。


还尝试过:

\DeclareUnicodeOption{document}

而且它也不起作用。

编辑

\documentclass{article}

\usepackage[mathletters]{ucs}

\usepackage[utf8x]{inputenc}

\begin{document}
\DeclareUnicodeCharacter{00B7}{\cdot} % U+00B7 = cdot
$a · b$
\end{document}

给出:

! Missing = inserted for \ifnum.
<to be read again> 
                   B
l.10 \DeclareUnicodeCharacter{00B7}{\cdot}
                                           % U+00B7 = cdot

在阅读ucs资料后,我也尝试过:

\documentclass{article}

\usepackage[mathletters]{ucs}

\usepackage[utf8x]{inputenc}

\uc@dclc{183}{mathletters}{\ensuremath{\cdot}}%·

\begin{document}
$a · b$
\end{document}

但它给出了:

! Undefined control sequence.
l.7 \uc
       @dclc{183}{mathletters}{\ensuremath{\cdot}}%·

答案1

没有 ucs 生活会容易得多:

\documentclass{article}
\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{00B7}{\cdot}

\begin{document}
$a · b$
\end{document}

但是使用 ucs 时你只需要使用正确的十进制数:

\documentclass{article}
\usepackage[mathletters]{ucs}
\usepackage[utf8x]{inputenc}
\DeclareUnicodeCharacter{183}{\cdot}

\begin{document}
$a · b$
\end{document}

答案2

生活变得更加轻松newunicodechar

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}

\newunicodechar{·}{\cdot}

\begin{document}
$a·b$
\end{document}

如果要\textperiodcentered在文本模式下保留默认定义(),请输入

\newunicodechar{·}{\ifmmode\cdot\else\textperiodcentered\fi}

答案3

对于最后一个例子,您可以使用makeatlettermakeatother。请参阅 latex2e.pdf 以获取这些命令的文档。

第二个代码不再起作用(我在从 Ubuntu 18 升级到 Ubuntu 20 并相应更新 TeX 版本后注意到了这一点)?\DeclareUnicodeCharacter这个组合中似乎有一个未定义的控制序列。删除三行前导码中的任何一行都会出现警告(可能不是想要的结果)

来源:一条评论

在这种情况下,此解决方案仍然有效。

我并不推荐使用这个包(参见包比较:utf8x 与 utf8 (输入)),但utf8我正在弄清楚一些有关正常的问题。

%! TEX program = pdflatex
\documentclass{article}
\usepackage[mathletters]{ucs}
\usepackage[utf8x]{inputenc}

\makeatletter
\uc@dclc{183}{mathletters}{\ensuremath{\cdot}}%·
% use {default} instead of {mathletters} to make it work in e.g. text mode
\makeatother

\begin{document}
$a · b$
\end{document}

相关内容