我想将 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
放在左边,把代码放在右边。