我正在尝试应用解决方案在算法中包含换行符,同时保持缩进对于以 开头的行if
。但then
不会对断行执行。
\documentclass{article}
\usepackage{algorithm}% http://ctan.org/pkg/algorithm
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx
\makeatletter
\let\OldStatex\Statex
\renewcommand{\Statex}[1][3]{%
\setlength\@tempdima{\algorithmicindent}%
\OldStatex\hskip\dimexpr#1\@tempdima\relax}
\makeatother
\begin{document}
\section{Struttura dati}
\begin{algorithm}
\caption{Leggi file .gpx}\label{getgpx}
\begin{algorithmic}[1]
\If{x=10 \textbf{and}}
\Statex y=10
\State speed~$\gets$~computeSpeed(
\Statex gpx.track(i).segment(j).delta\_s(q),
\Statex[2] gpx.track(i).segment(j).delta\_t(q));
\EndIf
\end{algorithmic}
\end{algorithm}
\end{document}
输出:
想要的输出:
1: if x=10 and
y=10 then
2: speed ← computeSpeed(...
答案1
下面定义了一个新的 if 调用,它允许您使用-like 格式(条件以 分隔)\multilineIf
指定一组堆叠的条件。结尾tabular
\\
然后会自动添加到条件的末尾。
\documentclass{article}
\usepackage{algorithm,algpseudocode}
\makeatletter
\let\OldStatex\Statex
\renewcommand{\Statex}[1][3]{%
\setlength\@tempdima{\algorithmicindent}%
\OldStatex\hskip\dimexpr#1\@tempdima\relax}
\makeatother
\newcommand{\stackedconditions}[1]{%
\begin{tabular}[t]{@{} l @{}}
#1
\end{tabular}%
}
\algdef{SE}[IF]{multilineIf}{EndIf}[1]{\algorithmicif\ \stackedconditions{#1\ \algorithmicthen}}{\algorithmicend\ \algorithmicif}%
\begin{document}
\section{Struttura dati}
\begin{algorithm}
\caption{Leggi file .gpx}\label{getgpx}
\begin{algorithmic}[1]
\multilineIf{%
$x = 10$ \textbf{and} \\
$y = 10$}
\State speed~$\gets$~computeSpeed(
\Statex gpx.track(i).segment(j).delta\_s(q),
\Statex[2] gpx.track(i).segment(j).delta\_t(q));
\EndIf
\end{algorithmic}
\end{algorithm}
\end{document}
默认情况下条件是l
左对齐的,但您可以更改它以满足您的需要。
\multilineIf
via的定义是从原始定义\algdef
复制并更改的,\If
algpseudocode.sty
。