LaTeX技巧630:用LaTeX寫algorithm

    xiaoxiao2026-08-05  0

    http://blog.sina.com.cn/s/blog_5e16f1770102ezhv.html

    选自:http://nckunoname.pixnet.net/blog

    網路上查了很多資料關於"用LaTeX寫algorithm"

    自己稍微整理一下

    algorithm排版可能需要的套件

    \documentclass[journal]{IEEEtran} \usepackage{algorithm} %\usepackage{algorithmic} \usepackage{algpseudocode} \usepackage{amsmath} \usepackage{graphics} \usepackage{epsfig}

    其中algorithmic在compile時會出現

    ! LaTex Error: Command \algorithm already defined.

    Or name \end... illegal, see p.192 of the manual

    原因不是很清楚,所以只好先mark掉

    \renewcommand{\algorithmicrequire}{\textbf{Input:}} % Use Input in the format of Algorithm \renewcommand{\algorithmicensure}{\textbf{Output:}} % Use Output in the format of Algorithm

    網路上範例一: \begin{algorithm}[htb] \caption{ Framework of ensemble learning for our system.} \label{alg:Framwork} \begin{algorithmic}[1] \Require The set of positive samples for current batch, $P_n$; The set of unlabelled samples for current batch, $U_n$; Ensemble of classifiers on former batches, $E_{n-1}$; \Ensure Ensemble of classifiers on the current batch, $E_n$; \State Extracting the set of reliable negative and/or positive samples $T_n$ from $U_n$ with help of $P_n$; \label{code:fram:extract} \State Training ensemble of classifiers $E$ on $T_n \cup P_n$, with help of data in former batches; \label{code:fram:trainbase} \State $E_n=E_{n-1}cup E$; \label{code:fram:add} \State Classifying samples in $U_n-T_n$ by $E_n$; \label{code:fram:classify} \State Deleting some weak classifiers in $E_n$ so as to keep the capacity of $E_n$; \label{code:fram:select} \\ \Return $E_n$; \end{algorithmic} \end{algorithm}

    排版效果圖:

    網路上範例二:

    \begin{algorithm}[h] \caption{An example for format For \& While Loop in Algorithm} \begin{algorithmic}[1] \For{each $i\in [1,9]$} \State initialize a tree $T_{i}$ with only a leaf (the root); \State $T=T\cup T_{i};$ \EndFor \ForAll {$c$ such that $c\in RecentMBatch(E_{n-1})$} \label{code:TrainBase:getc} \State $T=T\cup PosSample(c)$; \label{code:TrainBase:pos} \EndFor; \For{$i=1$; $i<n$; $i++$ } \State $//$ Your source here; \EndFor \For{$i=1$ to $n$} \State $//$ Your source here; \EndFor \State $//$ Reusing recent base classifiers. \label{code:recentStart} \While {$(|E_n| \leq L_1 )and( D \neq \phi)$} \State Selecting the most recent classifier $c_i$ from $D$; \State $D=D-c_i$; \State $E_n=E_n+c_i$; \EndWhile \label{code:recentEnd} \end{algorithmic} \end{algorithm}

    排版效果圖:

    個人範例:

    \begin{algorithm}[h] \caption{Conjugate Gradient Algorithm with Dynamic Step-Size Control} \label{alg::conjugateGradient} \begin{algorithmic}[1] \Require $f(x)$: objective funtion; $x_0$: initial solution; $s$: step size; \Ensure optimal $x^{*}$ \State initial $g_0=0$ and $d_0=0$; \Repeat \State compute gradient directions $g_k=\bigtriangledown f(x_k)$; \State compute Polak-Ribiere parameter $\beta_k=\frac{g_k^{T}(g_k-g_{k-1})}{\parallel g_{k-1} \parallel^{2}}$; \State compute the conjugate directions $d_k=-g_k+\beta_k d_{k-1}$; \State compute the step size $\alpha_k=s/\parallel d_k \parallel_{2}$; \Until{($f(x_k)>f(x_{k-1})$)} \end{algorithmic} \end{algorithm}

    排版效果圖:

    先前所使用的套件為algorithm或algorithmic

    接下來介紹另一個寫algorithm的套件alogrithm2e

    首先使用\usepackage指令 \usepackage[linesnumbered,boxed]{algorithm2e} 接下來是網路範例: \begin{algorithm} \caption{identifyRowContext} \KwIn{$r_i$, $Backgrd(T_i)$=${T_1,T_2,\ldots ,T_n}$ and similarity threshold $\theta_r$} \KwOut{$con(r_i)$} $con(r_i)= \Phi$\; \For{$j=1;j \le n;j \ne i$} { float $maxSim=0$\; $r^{maxSim}=null$\; \While{not end of $T_j$} { compute Jaro($r_i,r_m$)($r_m\in T_j$)\; \If{$(Jaro(r_i,r_m) \ge \theta_r)\wedge (Jaro(r_i,r_m)\ge r^{maxSim})$} { replace $r^{maxSim}$ with $r_m$\; } } $con(r_i)=con(r_i)\cup {r^{maxSim}}$\; } return $con(r_i)$\; \end{algorithm} 排版效果圖:

    延伸幾個問題:

    一、如何修改Algorithm的標題為中文的"演算法”?

    在\begin{document}之前加入\renewcommand{\algorithmcfname}{算法} 即可(註:需先安裝中文字形)

    二、如何去掉演算法中的豎線?

    加入 \SetAlgoNoLine 指令在\begin{algorithm}之後

    排版效果圖:

    三、還可以使用其他標題樣式?

    也可以使用\usepackage[ruled,vlined]{algorithm2e} 排版效果圖:

    其他樣式可以參考:http://mirror.bjtu.edu.cn/CTAN/macros/latex/contrib/algorithm2e/algorithm2e.pdf

    關於algorithm2e還有以下一些information The algorithm2e LaTeX package conflicts with several others over the use of the algorithm identifier.

    A common indicator is something like this message: Too many }'s.l.1616 }

    To resolve the issues, simply put the following just before the inclusion of the algorithm2e package:

    \makeatletter \newif\if@restonecol \makeatother \let\algorithm\relax \let\endalgorithm\relax

    转载请注明原文地址: https://ju.6miu.com/read-1310889.html
    最新回复(0)