我正在使用该algorithmicx
包,并且希望在不使用行号时完全左对齐文本。以下是示例:
注意只有Require
和Ensure
子句完全被推到左边。我怎样才能让其余代码也完全左对齐?
这是一个简单的例子:
\documentclass[a4paper,11pt]{article}
\usepackage{algorithmicx}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{amsmath}
\begin{document}
\begin{algorithm}
\caption{Algorithm Name}
\begin{algorithmic}
\Require some input
\Ensure some output
\Statex
\State \textbf{something}
\State more text
\begin{enumerate}
\item list item 1
\item an equation
\begin{equation*}
f(n) = \begin{cases}
1 & i = 1\\
f(n-1) + f(n-2) & i > 1
\end{cases}
\end{equation*}
\item third item
\end{enumerate}
\State last line
\end{algorithmic}
\end{algorithm}
\end{document}
答案1
您应该考虑使用以下功能algorithmicx
来产生您的格式要求,而不是仅仅将algorithmic
环境用作常规文档元素的外壳。
不管怎样,这可能就是你想要的(使用 Marco 的建议enumitem
):
\documentclass[a4paper,11pt]{article}
\setlength{\parindent}{0pt}% Just for this example
\usepackage{algorithm}% http://ctan.org/pkg/algorithms
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\usepackage{enumitem}% http://ctan.org/pkg/enumitem
\makeatletter
\def\algbackskip{\hskip\dimexpr-\algorithmicindent+\labelsep}
\def\LState{\State \algbackskip}%
\makeatother
\begin{document}
\begin{algorithm}
\caption{Algorithm Name}
\begin{algorithmic}
\Require some input
\Ensure some output
\Statex
\LState \textbf{something}
\LState more text
\begin{enumerate}[leftmargin=0pt,itemindent=1.5em]
\item list item 1
\item an equation
\begin{equation*}
f(n) = \begin{cases}
1 & i = 1\\
f(n-1) + f(n-2) & i > 1
\end{cases}
\end{equation*}
\item third item
\end{enumerate}
\LState last line
\end{algorithmic}
\end{algorithm}
\textbf{something}\par
more text
\begin{enumerate}
\item list item 1
\item an equation
\begin{equation*}
f(n) = \begin{cases}
1 & i = 1\\
f(n-1) + f(n-2) & i > 1
\end{cases}
\end{equation*}
\item third item
\end{enumerate}
last line
\end{document}
我已经定义了\LState
代表左对齐的\State
。不确定如果在 中嵌套内容,这会有多大效果\LState
(尚未测试)。
上方的算法显示了所需的输出,而下方的“算法”则显示了在常规文本中设置的相同内容(用于比较)。显示的公式略有水平调整。