我最近尝试插入关系代数的字符(左/右(半)连接,...),但到目前为止失败了。我知道 Unicode 和 ASCII 编码存在问题,但我认为它[utf8]{inputenc}
应该可以工作。
但
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\DeclareUnicodeCharacter{27d7}{⟗}
\begin{document}
⟗
\end{document}
不起作用。
! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.3 \DeclareUnicodeCharacter{27d7}{⟗}
? q
OK, entering \batchmode
是字体的问题还是我做错了什么?
哦,对我来说最好的事情就是知道如何创建一个命令\fullOuterJoin
来为我插入字符(比复制字符更容易)。
答案1
您想在全面的 LaTeX 符号列表, 或者这里的方法之一。 在这种情况下,Ulrike Fischer 为您找到了它并将其发布在评论中:\fullouterjoin
来自stix
(或也stix2
)。
的第一个参数\DeclareUnicodeCharacter
应该大写,所以27D4
。第二个参数应该是命令来生成字符。也就是说,如果你已经有命令\fullouterjoin
,你可以使用\DeclareUnicodeCharacter
将字符 ⟖ 转换为运行该命令的宏。
在这种情况下,\fullouterjoin
是一个数学模式命令,stix
并且您想在文本模式下使用它,这样\ensuremath{\fullouterjoin}
就可以了。
\documentclass{scrartcl}
\usepackage[utf8]{inputenc} % The default since 2018
\usepackage[T1]{fontenc}
\usepackage{stix2}
\DeclareUnicodeCharacter{27D7}{\ensuremath{\fullouterjoin}}
\begin{document}
\( \textnormal{foo} ⟗ \textnormal{bar} \)
\end{document}
另一种方法\DeclareUnicodeCharacter
与 LuaLaTeX 或 XeLaTeX 兼容,它是newunicodechar
:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc} % The default since 2018
\usepackage[T1]{fontenc}
\usepackage{stix2}
\usepackage{newunicodechar}
\newunicodechar{⟗}{\ensuremath{\fullouterjoin}}
\begin{document}
\( \textnormal{foo} ⟗ \textnormal{bar} \)
\end{document}
这两种方法的缺点是,要加载一个符号,你必须加载整个stix
或stix2
包。没有标准仅加载一个符号的方法来自传统的 TeX 包,但是这里有一些在这种情况下可以工作的代码:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc} % The default since 2018
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\DeclareFontEncoding{LS1}{}{}
\DeclareFontSubstitution{LS1}{stix2}{m}{n}
\DeclareFontFamily{LS1}{stix2frak}{\skewchar\font127 }
\DeclareFontShape{LS1}{stix2frak}{m}{n} {<-> stix2-mathfrak}{}
\DeclareFontShape{LS1}{stix2frak}{b}{n} {<-> stix2-mathfrak-bold}{}
\newcommand\textfullouterjoin{%
{\fontencoding{LS1}\fontfamily{stix2frak}\fontshape{n}\selectfont\symbol{"13}}}
\newcommand\fullouterjoin{%
\ifmmode\mathbin{\text{\textfullouterjoin}}%
\else\textfullouterjoin%
\fi}
\DeclareUnicodeCharacter{27D7}{\fullouterjoin}
\begin{document}
\( \textnormal{foo} ⟗ \textnormal{bar} \)
\end{document}
由于手册中stix2-type1
有一张字体图表,说明了此符号位于哪种字体的哪个位置,因此我从软件包的源文件中复制了相关行.sty
,.fdd
以设置符号字体。然后,我编写了一个命令,要么在文本模式下将字形作为文本符号插入,要么在数学模式下将其排版为二元运算符。(因此它不再需要\ensuremath
。)最后,我从第一个示例中复制了代码,以使 Unicode 字符扩展为该命令。