初步解决方案

初步解决方案
\begin{equation}
 \begin{aligned}
CPU\_time=\sum\limits_{i}^{n_1}{T\_int_{i}}+ \sum\limits_{}^{n_2}{T\_exe_{i}}+\sum\limits_{}^{n_3}{T\_gc_{i}}
\end{aligned}
\label{eq:cputime}
\end{equation}

就会得到图中的公式。

我注意到 之前有一个空格_。在 LaTeX 代码中,如果我删除\之前_,公式就不是我期望的。

那么如何删除前面的多余空格呢_

在此处输入图片描述

答案1

初步解决方案

CPU_time等似乎是计算机程序中的变量。在计算机科学中,用打字机字体排版变量是很常见的。在 LaTeX 中,这可以使用来实现\texttt。不过,定义一个额外的宏来排版变量更方便,我将其称为\var并定义为

\newcommand\var{\texttt}

如果您现在想将文档中所有变量的外观更改为无衬线字体,则只需使用即可\newcommand\var{\textsf}

\_当人们想要在文本中使用下划线字符时,总是打字是一件很乏味的事情。此外\_,总是从罗马字体系列中选择下划线字符,当与打字机字体一起使用时,它可能看起来很尴尬。underscore包允许您_在文本中输入 bare 来排版下划线,同时仍充当数学模式下的下标运算符。它还会从正确的字体中选择下划线。

amsmath包中,您也可以在数学模式下使用所有\text...命令,因此您不必为\var命令定义任何分支。请记住,在命令的参数中,\text...空格是不是忽略,即

\texttt{CPU_time} ≠ \texttt{CPU_time }

您使用的\sum\limits在显示模式下是多余的,并且会破坏文本模式下的行距,因此最好只使用\sum

经过上述所有修改后,代码和输出具有良好且连贯的风格。

\documentclass{article}
\usepackage{amsmath}
\usepackage{underscore}
\newcommand\var{\texttt}
\begin{document}
\begin{equation*}
  \var{CPU_time}
  = \sum_i^{n_1} \var{T_int}_i
  + \sum_i^{n_2} \var{T_exe}_i
  + \sum_i^{n_3} \var{T_gc}_i
\end{equation*}
\end{document}

在此处输入图片描述

修订的解决方案

正如@egreg在评论中提到的,这种方法可能会有问题,因为\text...会受到周围字体变化的影响。为了克服这个问题,最好\normalfont在过程中重置为\var。LaTeX 提供了智能宏来定义新的字体命令,我们在这个改进的示例中利用了这些命令。

\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{underscore}
\DeclareTextFontCommand{\var}{\normalfont\ttfamily}
\newtheorem{thm}{Theorem}
\begin{document}
\begin{thm}
  Theorems put everything in italic \texttt{including typewriter}
  \begin{equation*}
    \var{CPU_time}
    = \sum_i^{n_1} \var{T_int}_i
    + \sum_i^{n_2} \var{T_exe}_i
    + \sum_i^{n_3} \var{T_gc}_i
  \end{equation*}
\end{thm}
\end{document}

在此处输入图片描述

替代解决方案

@egreg 还在评论中建议使用\mathtt而不是 ,\texttt原因与前面所述相同。现在我们无法再利用该underscore包,但必须使 的_参数处于 active 状态。这需要更多代码,并且我们会丢失打字机字体中的下划线,现在已由(through )\var替换。\textunderscore\_

\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\newtheorem{thm}{Theorem}
\begingroup
\catcode`_=13
\gdef\var{%
  \begingroup
    \catcode`_=13
    \def_{\_}%
    \dovar
}
\gdef\dovar#1{%
    \mathtt{#1}%
  \endgroup
}
\endgroup
\begin{document}
\begin{thm}
  Theorems put everything in italic \texttt{including typewriter}
  \begin{equation*}
    \var{CPU_time}
    = \sum_i^{n_1} \var{T_int}_i
    + \sum_i^{n_2} \var{T_exe}_i
    + \sum_i^{n_3} \var{T_gc}_i
  \end{equation*}
\end{thm}
\end{document}

在此处输入图片描述

实际解决方案

为了回答实际问题,我们可以在这里逐个替换\mathtt\mathit减少\_下划线\!\_前的空间。

\documentclass{article}
\usepackage{amsmath}
\begingroup
\catcode`_=13
\gdef\var{%
  \begingroup
    \catcode`_=13
    \def_{\!\_}%
    \dovar
}
\gdef\dovar#1{%
    \mathit{#1}%
  \endgroup
}
\endgroup
\begin{document}
\begin{equation*}
  \var{CPU_time}
  = \sum_i^{n_1} \var{T_int}_i
  + \sum_i^{n_2} \var{T_exe}_i
  + \sum_i^{n_3} \var{T_gc}_i
\end{equation*}
\end{document}

在此处输入图片描述

相关内容