我在命令中\textlangle
使用\textrangle
\newcommand{\qdist}[1]{\textlangle#1\textrangle}
它用于数学和文本模式。在数学模式下,我收到错误消息
LaTeX Warning: Command \textrangle invalid in math mode on input line 952.
在两种模式下可以使用什么类似的符号?我使用 Lualatex。
数学家
\documentclass[msmallroyalvopaper
]{memoir}
\newcommand{\qdist}[1]{\textlangle#1\textrangle}
\begin{document}
text with \qdist{word}
and some math
\[ a = \qdist{symbol} \]
The multiple applications of a GIS can be summarized in three prototypical situations:
more text
\end{document}
答案1
您可以加入一个条件,在数学模式中\ifmmode
使用\langle
和,在文本模式中使用和。\rangle
\textlangle
\textrangle
此方法适用于 pdfLaTeX、LuaLaTeX 和 XeLaTeX。
\documentclass{memoir}
\usepackage{textcomp} % for \textlangle and \textrangle macros
\newcommand{\qdist}[1]{\ifmmode\langle#1\rangle\else\textlangle#1\textrangle\fi}
\begin{document}
\qdist{word}, $\qdist{symbol}$
\end{document}
附录-- 正如 @egreg 在评论和他单独的回答中指出的那样,使用\newcommand
创建\qdist
宏(如上所示)可能会遇到麻烦。有必要使用\DeclareRobustCommand
而不是\newcommand
。
答案2
我猜你不希望参数的排版\qdist
在数学或文本中改变字体,所以更简单的
\newcommand{\qdist}[1]{\text{\textlangle#1\textrangle}}
可能就足够了。另一方面,如果这出现在斜体上下文中,比如定理陈述中,效果就会不愉快:
\newcommand{\qdist}[1]{\textup{\textlangle#1\textrangle}}
看起来好多了。
如果您希望数学中的参数应该\qdist
是一些数学符号,那么在我看来您应该使用两个不同的命令,因为情况不同并且命令的语义很重要。
如果你不想遵循建议,请使用
\DeclareRobustCommand{\qdist}[1]{%
\ifmmode
\langle#1\rangle
\else
\textup{\textlangle#1\textrangle}%
\fi
}
这与 Mico 的建议在两个重要细节上有所不同:它在任何情况下都能正常工作(Mico 的建议不能),并且在任何斜体环境中都能保持输出直立。