我正在尝试设置一种编写语义类型的快捷方式。这些通常写在分隔符内$\langle$
,$\rangle$
斜体字母代表每种类型,逗号将它们分开。它们应该看起来像这样:
我想出了如下的宏:
\newcommand{\type}[1]{%
$\langle$\textit{#1}$\rangle$%
}
但是,这当然也会导致逗号变成斜体,而在这种情况下通常不会这样做:
有没有办法在使用此命令时避免将逗号变为斜体?
梅威瑟:
\documentclass{article}
\newcommand{\type}[1]{%
$\langle$\textit{#1}$\rangle$%
}
\usepackage[T1]{fontenc}
\usepackage{times}
\begin{document}
\type{e, t} % Don't want comma italicized
$\langle e, t\rangle$ % Don't want math typeface for letters
$\langle$\textit{e}, \textit{t}$\rangle$ % Desired result, but cumbersome
\end{document}
编辑:
需要澄清的是,我不想这样做的原因$\langle#1\rangle$
是我希望将语义类型设置为与主文本相同的字体,而不是数学模式字体。我已更新 MWE 以反映这一点,以下是比较:
答案1
您希望语义类型为数学变量.请注意mathptmx
下面,不是长期弃用的times
包。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{mathptmx}
\newcommand{\type}[1]{\ensuremath{\langle#1\rangle}}
\begin{document}
\type{e, t}
$\langle$\textit{e}, \textit{t}$\rangle$
\end{document}
如您所见,唯一的区别在于复杂版本中的(过度)间距。
这是一个更好的版本,因为newtx
它提供了更丰富的类似 Times 的数学字体:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{newtxtext,newtxmath}
\newcommand{\type}[1]{\ensuremath{\langle#1\rangle}}
\begin{document}
\type{e, t}
$\langle$\textit{e}, \textit{t}$\rangle$
\end{document}
对于 XeLaTeX 和设置为 TeX Gyre Pagella 的文本字体,使用newpxmath
;但是,需要进行小幅修复。
\documentclass{article}
\usepackage[no-math]{fontspec}
\usepackage{newpxmath}
\usepackage{amsmath}
\setmainfont{TeX Gyre Pagella}
\DeclareSymbolFont{operators}{OT1}{zpltlf}{m}{n}
\SetSymbolFont{operators}{bold}{OT1}{zpltlf}{b}{n}
\newcommand{\type}[1]{\ensuremath{\langle#1\rangle}}
\begin{document}
\type{e, t}
\end{document}
答案2
如何使用:
\documentclass{article}
\def\type<#1,#2>{$\langle$\textit{#1}, \textit{#2}$\rangle$}
\begin{document}
\type<e, t>
\end{document}
生产:
您也可以删除type
并直接使用
\def\<#1,#2>{$\langle$\textit{#1}, \textit{#2}$\rangle$}
然后将其放入\<e,t>
您的文档中。
编辑
为了允许嵌套,您应该明确排版逗号\textrm
:
\documentclass{article}
\def\<#1,#2>{$\langle$\textit{#1}\textrm{,} \textit{#2}$\rangle$}
\begin{document}
\<e, t>
\<{\<e,t>},{\<e,t>}>
\end{document}