2

I'm using the algorithmic package to create pseudo-code for my document. One of the algorithms has a few lines that are too long and they go too far to the edge of the page so I wanted to add a breakline in between a function and the second part of the function to indent so that it starts on the same indentation where the function started.

I found this solution here: Include a line break in algorithmic while maintaining indentation. And wanted to use the solution using varwidth and parbox. So I did this on my code:

\begin{algorithm}[tbp]
\caption{Bla bla}
\label{alg:traintestdeep}
\begin{algorithmic}[1]% 
\Procedure{train\_test}{$train\_features, test\_features, unlabeled\_features$} \label{imgpix}
    \Statex Returns test results of the deep classifier.

    \State $\mathit{ResNet} \gets load()$ \Comment{ResNet50 weights}
    \State $\mathit{Incep} \gets load()$ \Comment{InceptionV3 weights}
    \State $\mathit{Xcep} \gets load()$ \Comment{Xception weights}

    \State \begin{varwidth}[t]{\linewidth}

    \State {$res\_features \gets ResNet(train\_features,$\par
    \hskip\algorithmicindent $test\_features,unlabeled\_features)$}

    \State {$inc\_features \gets Incep(train\_features,$\par
    \hskip\algorithmicindent $test\_features,unlabeled\_features)$}

    \State {$xcp\_features \gets Xcep(train\_features,$\par
    \hskip\algorithmicindent $test\_features,unlabeled\_features)$}

    \end{varwidth}

    \State {$all\_features \gets concat(res\_features,inc\_features,xcp\_features)$}

    \If{$save\_features = True$} 
        \State {$savef(all\_features)$}
    \EndIf

    \State {$model \gets create\_model()$} \label{alg:model}

    \If {$training = True$}
        \State {$fitted\_model \gets model.fit(all\_features[train], labels)$} \label{alg:fitmodel1}
        \If {$pseudo = True$} 
            \State \begin{varwidth}[t]{\linewidth}

            \State {$newly\_labeled \gets $\par
            \hskip\algorithmicindent $pseudo\_labeling(fitted\_model,all\_features[unlabeled])$} \label{alg:fitmodel2}

            \end{varwidth}

            \State {$fitted\_model \gets fitted\_model.fit(newly\_labeled, labels)$} \label{alg:fitmodel3}
        \EndIf
        \State {$model \gets fitted\_model$}
    \EndIf

    \If {$testing = True$}
        \State {$results \gets fitted\_model(all\_features[test])$}
    \EndIf

    \State\Return $results$

\EndProcedure
\end{algorithmic}
\end{algorithm}

But the result is messy like shown here:

enter image description here

on lines 6, 7, 8 and 18 that is where I need to escape and indent the line. Any idea how to fix it?

1

The problem is with \State in the {varwidth} block. You can change your {varwidth} block without \State.

\State \begin{varwidth}[t]{\linewidth}

    {$res\_features \gets ResNet(train\_features,$\par
    \hskip\algorithmicindent $test\_features,unlabeled\_features)$}

     {$inc\_features \gets Incep(train\_features,$\par
    \hskip\algorithmicindent $test\_features,unlabeled\_features)$}

     {$xcp\_features \gets Xcep(train\_features,$\par
    \hskip\algorithmicindent $test\_features,unlabeled\_features)$}

\end{varwidth}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.