当我在数学环境中使用冒号时,我发现我需要的间距是二元运算符的间距(而不是 a 的间距mathrel
),例如,射影空间中的直线 $ax+by+ct=0$ 具有齐次坐标 $(a \mathbin{:}
b \mathbin{:}
c)$ 而不是 $(a : b : c)$(类似地,$10 \mathbin{:}
2=5$ 而不是 $10 \mathrel{:}
2=5$。)
到目前为止,我已经在文档的序言中使用以下代码进行了管理:
\mathcode`:="203A
我认为它将 的类:
从更改mathrel
为mathbin
但我不确定这是否是实现这一点的正确方法。我:
通过反复试验找到了符号所在的位置,所以我甚至不确定如果我需要更改不同符号的类,在类似情况下应该怎么做。我理解(也许我错了)中的第一个数字"203A
定义了数学符号的类,例如2
定义 amathbin
和3
定义 a mathrel
(这是冒号的默认类)。
我想要一些语义上更明显的东西,例如:
\DeclareMathSymbol{:}{\mathbin{:}}
这是我的最小代码
\documentclass{article}
\usepackage{amsmath}
%\mathcode`:="203A
\begin{document}
I could write the homogeneous coordinates of a point as $(a:b:c:d)$ or $(a\mathord{:}b\mathord{:}c\mathord{:}d)$ or, even worse, $a\mathpunct{:}b\mathpunct{:}c\mathpunct{:}d$, but I'd rather go for $(a\mathbin{:}b\mathbin{:}c\mathbin{:}d)$.
\begin{align*}
\texttt{mathrel}\quad & (a\mathrel{:}b\mathrel{:}c)\\
\texttt{mathord}\quad & (a{:}b{:}c)\\
\texttt{mathbin}\quad & (a\mathbin{:}b\mathbin{:}c)\\
\texttt{mathrel}\quad & (a:b:c)
\end{align*}
Until now I've achieved this with the command \verb*|\mathcode`:="203A| so when I type \verb*|$(a:b:c:d)$| I get $(a\mathbin{:}b\mathbin{:}c\mathbin{:}d)$, that's all.
\end{document}
答案1
你可以\showthe\mathcode`:
,但是这会输出十进制12346
。如何获取里面LaTeX 的转化?
嗯,你需要知道关系符号的类是 3,而运算符号的类是 2。
如果你做知道冒号是一个关系符号,你只想减去"1000
(十六进制):
\mathcode`:=\inteval{\mathcode`:-"1000}
例子
\documentclass{article}
\usepackage{amsmath}
\begin{document}
$(a:b:c)$
\mathcode`:=\inteval{\mathcode`:-"1000}
$(a:b:c)$
\end{document}
当然,你会在序言中重新定义。
\documentclass{article}
\usepackage{amsmath}
\AtBeginDocument{%
\mathcode`:=\inteval{\mathcode`:-"1000}%
}
\begin{document}
$(a:b:c)$
\end{document}
另一方面,我的建议是不是这样做是因为冒号周围的空间会参与线条的拉伸/收缩。
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\NewDocumentCommand{\pc}{m}% projective coordinates
{
\seq_set_split:NVn \l_tmpa_seq \c_colon_str { #1 }
( \seq_use:Nn \l_tmpa_seq { \mspace{1\medmuskip}{:}\mspace{1\medmuskip} } )
}
\ExplSyntaxOff
\begin{document}
$\pc{a:b:c}$
\end{document}