左边是源代码,右边是 Nassi–Shneiderman(浮动?)

左边是源代码,右边是 Nassi–Shneiderman(浮动?)

我想将 Nassi-Schneiderman 图放入我的 LaTeX 文档中,同时在旁边显示所示算法的源代码。使用该StrukTeX包绘制图表非常方便,显示源代码也不成问题。

问题是:我想不出如何将文本(或本例中为源代码)放在左侧,将图表放在右侧(或反之亦然)。我该如何解决这个问题?

以下是我针对这个问题所需的代码部分:

\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[german,curves]{struktex}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings}
\usepackage{courier}
\lstset{
        basicstyle=\footnotesize\ttfamily, % Standardschrift
        numbers=left,               % Ort der Zeilennummern
        numberstyle=\tiny,          % Stil der Zeilennummern
        numbersep=5pt,              % Abstand der Nummern zum Text
        tabsize=3,                  %
        extendedchars=true,         %
        breaklines=true,            %
        keywordstyle=\color{RoyalBlue}\textbf,
        commentstyle=\color{ForestGreen},
        frame=bottomline,
         stringstyle=\color{WildStrawberry}\ttfamily, % Farbe der String
         xleftmargin=17pt,
         framexleftmargin=17pt,
         framexrightmargin=5pt,
         framexbottommargin=4pt,    
 }

\begin{document}
\begin{lstlisting}[language=Java]
int eingabe = 13;
    int vrbeingabe = eingabe;
    String ergebnis = "";

    while(vrbeingabe > 0) {
        if(vrbeingabe % 2 == 0) {
            ergebnis = ("0"+ergebnis);
            vrbeingabe = vrbeingabe / 2;
        } else {
            ergebnis = ("1"+ergebnis);
            vrbeingabe = vrbeingabe / 2;
        }
    }

    System.out.println("Die Dezimalzahl "+eingabe+" entspricht der Binaerzahl "+ergebnis);
\end{lstlisting}
\begin{struktogramm}(85,20)[Umwandlung dezimaler in binäre Zahlen]
    \assign[10]{Eingabe $i$}
    \assign[10]{bs $\gets \emptyset$}
    \while[8]{solang $i > 0$}
        \ifthenelse[15]{5}{6}
            {Rest bei $\frac{i}{2}$}{\sTrue}{\sFalse}
            \assign{bs $\gets$ "1" $+$ bs}
        \change
            \assign{bs $\gets$ "0" $+$ bs}
        \ifend
                   \assign{i $\gets \frac{i}{2}$}
               \whileend
    \assign[10]{Ausgabe bs}
\end{struktogramm}
\end{document}

到目前为止,输出如下所示: 上述代码的输出

使用其中一个答案中建议的 minipage 环境,它看起来像这样: 小页面

编辑:添加了代码的实际部分。抱歉我的错误示​​例给您带来不便。

答案1

您可以使用两个并排的minipage:(也许您需要调整一些设置):

\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[german,curves]{struktex}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings}
\usepackage{courier}

\lstset{
        basicstyle=\footnotesize\ttfamily, % Standardschrift
        numbers=left,               % Ort der Zeilennummern
        numberstyle=\tiny,          % Stil der Zeilennummern
        numbersep=5pt,              % Abstand der Nummern zum Text
        tabsize=3,                  %
        extendedchars=true,         %
        breaklines=true,            %
        keywordstyle=\color{RoyalBlue}\textbf,
        commentstyle=\color{ForestGreen},
        frame=bottomline,
         stringstyle=\color{WildStrawberry}\ttfamily, % Farbe der String
         xleftmargin=17pt,
         framexleftmargin=17pt,
         framexrightmargin=5pt,
         framexbottommargin=4pt,    
 }

\begin{document}

%\begin{figure}% uncomment this, and the corresponding \end{figure} below 
%if you want to turn the object into a floating one; in this case, the 
%following \noindent is superfluous
\noindent\begin{minipage}[t]{0.5\textwidth}
\vspace*{0pt}
\begin{lstlisting}[language=Java,framexrightmargin=0pt]
int eingabe = 13;
    int vrbeingabe = eingabe;
    String ergebnis = "";

    while(vrbeingabe > 0) {
        if(vrbeingabe % 2 == 0) {
            ergebnis = ("0"+ergebnis);
            vrbeingabe = vrbeingabe / 2;
        } else {
            ergebnis = ("1"+ergebnis);
            vrbeingabe = vrbeingabe / 2;
        }
    }

    System.out.println("Die Dezimalzahl "+eingabe+" entspricht der Binaerzahl "+ergebnis);
\end{lstlisting}
\end{minipage}%
\begin{minipage}[t]{0.5\textwidth}
\vspace*{0pt}
\footnotesize
\begin{struktogramm}(60,20)[Umwandlung dezimaler in binäre Zahlen]
    \assign[10]{Eingabe $i$}
    \assign[10]{bs $\gets \emptyset$}
    \while[8]{solang $i > 0$}
        \ifthenelse[15]{5}{6}
            {Rest bei $\frac{i}{2}$}{\sTrue}{\sFalse}
            \assign{bs $\gets$ "1" $+$ bs}
        \change
            \assign{bs $\gets$ "0" $+$ bs}
        \ifend
                   \assign{i $\gets \frac{i}{2}$}
               \whileend
    \assign[10]{Ausgabe bs}
\end{struktogramm}
\end{minipage}
%\end{figure}

\end{document}

在此处输入图片描述

答案2

考虑使用wrapfig包裹:

\begin{wrapfigure}{r}{0.5\textwidth}
    \begin{struktogramm}(85,20)[Umwandlung dezimaler in binäre Zahlen]
        ...
    \end{struktogramm}
\end{wrapfigure}

这样图表就会放在右侧。当然,文本也会放在左侧。

可以将其包装到wrapfigure代码中:

\begin{wrapfigure}{r}{0.35\textwidth}
    \begin{lstlisting}[language=Java]
    // Java Code
    // to be on the left/right
    // of the Nassi-Shneiderman
    //diagramm
    \end{lstlisting}
\end{wrapfigure}

这样就把struktogramm放在左边,把代码放在右边。

相关内容