我正在使用algorithm2e
。这些是我的声明:
\usepackage{cvpr}
\usepackage{times}
\usepackage{epsfig}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{amssymb}
% For tables
\usepackage{tabu}
%\usepackage{caption} %\captionsetup[table]{skip=10pt}
\bibliographystyle{unsrtnat}
\usepackage[numbers,sort&compress]{natbib}
\usepackage[linesnumbered,boxed]{algorithm2e}
\usepackage{algpseudocode}
% Include other packages here, before hyperref.
% If you comment hyperref and then uncomment it, you should delete
% egpaper.aux before re-running latex. (Or just hit 'q' on the first latex
% run, let it finish, and you should be clear).
\usepackage[breaklinks=true,bookmarks=false]{hyperref}
这是我的代码。为什么有些文本是斜体,而有些不是?有什么函数可以使文本变成斜体,而不使文本变成斜体?
\begin{algorithm}
\SetKwInOut{Input}{Input}
\SetKwInOut{Output}{Output}
\Input{a graph G = (V,E)}
\Output{a hierarchical tree}
\BlankLine
Initialize edge weights\\
\ForEach{\normalfont{vertex} V_i \subset V } % why is V_i italic but V not ?
{
j \leftarrow \text{argmin}_k(\text{cost}(V_i, V_k)), \ k \subset \text{neighbors} \ \text{of} \ i \\
E_{ij} \leftarrow E_{ij} + 1 \\
}
\BlankLine
\ForEach{\normalfont{edge} E_{ij} \subset E }
{
E_{ij} \leftarrow argmin(E_{ij} \normalfont{.weight}), \ j \subset N ) \\
E_{ij} \leftarrow E_{ij} + 1 \\
}
\end{algorithm}
答案1
您当前的方法/使用方式存在很多问题algorithm2e
. 无特定顺序:
用作
\;
行尾,而不是\\
。如果您不想打印分号,请将其添加\DontPrintSemicolon
到您的序言中。用
$
...包围你的数学内容$
。为了一致性定义执行某些操作的命令。例如,在伪代码中格式化“变量”,可以定义
\newcommand{\var}{\texttt}
并用于
\var
每个变量。\ForEach
(以及 中的其他条件子句)的第一个参数algorithm2e
使用 进行设置\itshape
。如果您希望它不是alics,则使用或it
进行设置。{\upshape ...}
\textup{...}
\documentclass{article}
\usepackage{mathptmx,amsmath}
\usepackage[linesnumbered,boxed]{algorithm2e}
\DontPrintSemicolon
\DeclareMathOperator{\argmin}{argmin}% https://tex.stackexchange.com/q/5223/5764
\newcommand{\var}{\texttt}
\begin{document}
\begin{algorithm}
\SetKwInOut{Input}{Input}
\SetKwInOut{Output}{Output}
\Input{a graph $G = (V,E)$}
\Output{a hierarchical tree}
\BlankLine
Initialize edge weights\;
\ForEach{ \textup{vertex} $V_i \subset V$ }
{
$j \leftarrow \argmin_k (\var{cost}(V_i, V_k))$ where $k \subset \text{neighbours of $i$}$\;
$E_{ij} \leftarrow E_{ij} + 1$\;
}
\BlankLine
\ForEach{ \textup{edge} $E_{ij} \subset E$ }
{
$E_{ij} \leftarrow \argmin (E_{ij} \text{.weight})$ where $j \subset N$\;
$E_{ij} \leftarrow E_{ij} + 1$\;
}
\end{algorithm}
\end{document}
顺便说一句,我发现使用
$E_{ij} \leftarrow E_{ij} + 1$\;
多余的,因为伪代码构造已经表明你正在经历每个 E_{ij}
。此外,E_{ij} + 1
指的是什么?
答案2
我同意上面的回答。我将补充以下内容:所有样式都可以重新定义为算法,但您必须了解如何理解文本。首先,如果这是数学,它将显示为数学,这意味着斜体其次,这取决于这是普通文本还是关键字、函数、算法命令的参数等的文本...
我附上了一个基于您的代码的示例,以展示如何编写您的算法:1)使用数学模式,如上所述,当您编写数学时 2)定义您自己的变量宏,再次如上所述:您可以使用算法风格的 SetKwData 宏和 SetDataSty 来控制变量的样式 3)使用 SetKwFunction 定义算法的函数(argmin 和 cost)4)使用算法提供的宏重新定义算法文本的样式
这是我根据您的示例(特别注意在 ForEach 中输入为参数的顶点与在 ArgSty 中输入为数据(变量)的边之间的差异)
\documentclass[a4paper]{article}
\usepackage[lined,linesnumbered,boxed]{algorithm2e}
\usepackage{amsmath,amssymb,amstext}
\usepackage{xcolor,xcolor-material}
\SetKwFunction{argmin}{argmin$_k$}
\SetKwFunction{cost}{cost}
\SetKw{Of}{of}
\SetKwData{neighbors}{neighbors}
\SetKwData{edge}{edge}
\newcommand{\mykwsty}[1]{\textcolor{blue}{\emph{#1}}}
\newcommand{\myfuncsty}[1]{\textcolor{red}{\textbf{\texttt{#1}}}}
\newcommand{\myvarsty}[1]{\textcolor{GoogleGreen}{\texttt{#1}}}
\SetKwSty{mykwsty}
\SetArgSty{textbf}
\SetFuncSty{myfuncsty}
\SetDataSty{myvarsty}
\begin{document}
\begin{algorithm}
\SetKwInOut{Input}{Input}
\SetKwInOut{Output}{Output}
\Input{a graph G = (V,E)}
\Output{a hierarchical tree}
\BlankLine
Initialize edge weights\\
\ForEach{vertex $V_i\subset V$} % why is V_i italic but V not ?
{
$j \leftarrow\argmin{\cost{$V_i, V_k$}}, k\subset\neighbors\ \Of\ i$\;
$E_{ij}\leftarrow E_{ij} + 1$\;
}
\BlankLine
\ForEach{\edge $E_{ij}\subset E$}
{
$E_{ij}\leftarrow\argmin\left(E_{ij}\text{weight}\right), j\subset N )$\;
$E_{ij} \leftarrow E_{ij} + 1$\;
}
\end{algorithm}
\end{document}
给出