![algorithmicx:缩短算法](https://linux22.com/image/238089/algorithmicx%EF%BC%9A%E7%BC%A9%E7%9F%AD%E7%AE%97%E6%B3%95.png)
我的算法占用了文档中的太多空间。我想做两件事:
- 设置更大的宽度,这样一行中放不下的线条就可以了
- 删除带有
end
关键字的行(即结束标签或任何它们被称为的行)
这些事情可能吗?
抱歉,这些问题很无趣,但我对 TeX 还很陌生,我只将 LaTeX 用于算法,我正在以另一种格式编写我的文档。
更新:例子:
完整文档:
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{amsmath}
\begin{document}
\begin{algorithm}
\begin{algorithmic}[1]
\Function {NMS3D}{$T : array[1..w, 1..h, 1..d], n: int$}
\State \Comment $(2 n +1) \times (2 n +1) \times (2 n +1)$ szomsz\'eds\'gban keress\"uk a lok\'alis maximumokat
\State label \textbf{mainloop:}
\ForAll {$(i, j, k) \in \{ n, 2n+1, ... \}^3 \cap [1..w - n] \times [1..h - n] \times [1..d - n] $}
\State \textbf{initialize:} $(i_{max}, j_{max}, k_{max}) \gets (i, j, k)$
\ForAll {$(i_2, j_2, k_2) \in [i, i+n] \times [j, j+n] times [k, k+n]$}
\If {$T[i_2, j_2, k_2] > T[i_{max}, j_{max}, k_{max}]$}
\State $(i_{max}, j_{max}, k_{max}) \gets (i_2, j_2, k_2)$
\EndIf
\EndFor
\ForAll {$(i_2, j_2, k_2) \in [i_{max}-n, i_{max}+n] \times [j_{max}-n, j_{max}+n] \times [k_{max}-n, k_{max}+n]
- [i, i+n] \times [j, j+n] \times [k, k+n]$}
\If {$T[i_2, j_2, k_2] > T[i_{max}, j_{max}, k_{max}]$}
\State \textbf{continue} mainloop
\State \Comment a maximum jel\"olt t\'ul k\"ozel van egy m\'asik maximumhoz, elvetj\"uk
\EndIf
\EndFor
\State $list_{max} \stackrel{add}{\longleftarrow} (i_{max}, j_{max}, k_{max})$
\EndFor
\State \textbf{return} $list_{max}$
\EndFunction
\end{algorithmic}
\end{algorithm}
\end{document}
下面是我想要更改的结果,用红色进行了更正(使用 MS Paint,是的,我确实有一些史诗般的 Paint 技能,对吧?):
评论是匈牙利语的,别介意
答案1
本质上,这是一个页面几何的问题。\usepackage{fullpage}
例如,它可以工作,但您可能还会摆弄该geometry
包以获得更加可定制的效果。
另请参阅一英寸边距和几何包。
至于关于删除end
s 的第二点,algorithmicx
的文档第 4 节描述了自定义块。
编辑:这是一个例子。
如果添加\algnotext{EndFor}
,For
块将打印不end
。然后您可以将其应用于EndIf
您需要的任何其他内容。
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{amsmath,fullpage}
\algnotext{EndFor}
\algnotext{EndIf}
\begin{document}
\begin{algorithm}
\begin{algorithmic}[1]
\Function {NMS3D}{$T : array[1..w, 1..h, 1..d], n: int$}
\State \Comment $(2 n +1) \times (2 n +1) \times (2 n +1)$ szomsz\'eds\'gban keress\"uk a lok\'alis maximumokat
\State label \textbf{mainloop:}
\ForAll {$(i, j, k) \in \{ n, 2n+1, ... \}^3 \cap [1..w - n] \times [1..h - n] \times [1..d - n] $}
\State \textbf{initialize:} $(i_{max}, j_{max}, k_{max}) \gets (i, j, k)$
\ForAll {$(i_2, j_2, k_2) \in [i, i+n] \times [j, j+n] times [k, k+n]$}
\If {$T[i_2, j_2, k_2] > T[i_{max}, j_{max}, k_{max}]$}
\State $(i_{max}, j_{max}, k_{max}) \gets (i_2, j_2, k_2)$
\EndIf
\EndFor
\ForAll {$(i_2, j_2, k_2) \in [i_{max}-n, i_{max}+n] \times [j_{max}-n, j_{max}+n] \times [k_{max}-n, k_{max}+n]
- [i, i+n] \times [j, j+n] \times [k, k+n]$}
\If {$T[i_2, j_2, k_2] > T[i_{max}, j_{max}, k_{max}]$}
\State \textbf{continue} mainloop
\State \Comment a maximum jel\"olt t\'ul k\"ozel van egy m\'asik maximumhoz, elvetj\"uk
\EndIf
\EndFor
\State $list_{max} \stackrel{add}{\longleftarrow} (i_{max}, j_{max}, k_{max})$
\EndFor
\State \textbf{return} $list_{max}$
\EndFunction
\end{algorithmic}
\end{algorithm}
\end{document}