我该如何解决这个问题纽埃沃和梅杰? 它们出现在数学模式中但它们应该出现在文本模式中:
另外,为什么\argmax_{\mathbf{x} \in \mathcal{X}}
出现在 arg max 旁边而不是下面?
\documentclass{article}
\usepackage{algorithm2e}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{arg\,min}
\DeclareMathOperator*{\argmax}{arg\,max}
\begin{document}
\begin{algorithm}[H]
\DontPrintSemicolon % Some LaTeX compilers require you to use \dontprintsemicolon instead
\KwIn{.}
\KwOut{.}
% \textit{Inicialización}:\\
% Aleatoriamente inicializar $b_{u}$ y $b_{i}$\\
\For{$t = 1$ \text{hasta} $T$}{
Ajustar $\Psi$ hasta $\mathcal{H}$\\
$\mathbf{x}^{\text{\tiny Nuevo}} = \argmax_{\mathbf{x} \in \mathcal{X}} a(\Psi(\mathbf{x},\mathcal{D}), \mathcal{H})$\\
Evaluar $b(\mathbf{x}^{\text{\tiny Nuevo}},\mathcal{D})$\\
\If{$b(\mathbf{x}^{\text{\tiny Nuevo}},\mathcal{D}) < b(\mathbf{x}^{\text{\tiny Mejor}},\mathcal{D})$}{
$\mathbf{x}^{\text{\tiny Mejor}}=\mathbf{x}^{\text{\tiny Nuevo}}$\\
$\mathcal{H} = \mathcal{H} \cup (\mathbf{x}^{\text{\tiny Nuevo}},b(\mathbf{x}^{\text{\tiny Nuevo}},\mathcal{D})) $
}
}
\Return $\mathbf{x}^{\text{\tiny Mejor}}$
\end{algorithm}
\end{document}
答案1
当\If
扩展时,它的第一个参数(条件)被包装在一个\emph{...}
调用中,使得文本被强调,即通常以斜体字体显示。\text
将其参数设置为当前文本字体,在这种情况下为斜体,因此上标就是这样打印的。
根据经验,\text
仅当您想要使用实际的解释性文本时才在数学模式下使用。变量名称的部分通常不应与文本字体混合。因此作为\mathrm
打印上标的替代用途。为了使文本比普通上标更小,您可以另外设置\scriptscriptsize
,因为\tiny
在数学模式下不起作用。
为了消除代码冗长,我建议为这些特殊变量定义新命令:
\newcommand\xNuevo{\ensuremath{\mathbf{x}^{\scriptscriptstyle\mathrm{Nuevo}}}}
\newcommand\xMejor{\ensuremath{\mathbf{x}^{\scriptscriptstyle\mathrm{Mejor}}}}
并在您的代码中使用它们:
\If{$b(\xNuevo,\mathcal{D}) < b(\xMejor,\mathcal{D})$}{...}
至于第二个问题,内联数学模式中的运算符(例如 between $...$
)的下标和上标都设置在它们旁边,以减少当前行的高度。如果要强制上下标,请\limits
在运算符名称后添加:
\argmax\limits_{\mathbf{x} \in \mathcal{X}}
如果你总是想要上面/下面的脚本,你可以定义\argmax
如下:
\newcommand\argmax{\mathop{\operatorname{arg\,max}}\limits}
更新示例:
\documentclass{article}
\usepackage{algorithm2e}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{arg\,min}
%\DeclareMathOperator*{\argmax}{arg\,max}
\newcommand\argmax{\mathop{\operatorname{arg\,max}}\limits}
\newcommand\xNuevo{%
\ensuremath{\mathbf{x}^{\scriptscriptstyle\mathrm{Nuevo}}}%
}
\newcommand\xMejor{%
\ensuremath{\mathbf{x}^{\scriptscriptstyle\mathrm{Mejor}}}%
}
\begin{document}
\begin{algorithm}[H]
\DontPrintSemicolon % Some LaTeX compilers require you to use \dontprintsemicolon instead
\KwIn{.}
\KwOut{.}
% \textit{Inicialización}:\\
% Aleatoriamente inicializar $b_{u}$ y $b_{i}$\\
\For{$t = 1$ \text{hasta} $T$}{
Ajustar $\Psi$ hasta $\mathcal{H}$\\
$\mathbf{x}^{\text{\tiny Nuevo}} = \argmax\limits_{\mathbf{x} \in \mathcal{X}} a(\Psi(\mathbf{x},\mathcal{D}), \mathcal{H})$\\
Evaluar $b(\mathbf{x}^{\text{\tiny Nuevo}},\mathcal{D})$\\
\If{$b(\xNuevo,\mathcal{D}) < b(\xMejor,\mathcal{D})$}{
$\mathbf{x}^{\text{\tiny Mejor}}=\mathbf{x}^{\text{\tiny Nuevo}}$\\
$\mathcal{H} = \mathcal{H} \cup (\mathbf{x}^{\text{\tiny Nuevo}},b(\mathbf{x}^{\text{\tiny Nuevo}},\mathcal{D})) $
}
}
\Return $\mathbf{x}^{\text{\tiny Mejor}}$
\end{algorithm}
\end{document}