使用 textit 使宏中的逗号不变为斜体

使用 textit 使宏中的逗号不变为斜体

我正在尝试设置一种编写语义类型的快捷方式。这些通常写在分隔符内$\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}

相关内容