我正在尝试使用编写一些伪代码逐字。问题是,我无法让它写出正确的符号。这是我的代码:
\begin{verbatim}
S= $\emptyset$
while ((not ottimo(S) ) and (C \ne $\emptyset$))
x = seleziona(C)
C = C – {x}
if (ammissibile(S U {x}))
S = S U {x}
if (ottimo(S))
return S
else
return $\emptyset$
\end{verbatim}
如果我写,$\emptyset$
它会按所写的方式显示,但如果我使用Ø
它,则会返回错误。
我该如何修复它?
附言:它对其他每个符号的作用相同,例如不等于,...
答案1
我认为这不是呈现伪代码的最佳方式。无论如何,您可以使用alltt
,但符号看起来会非常不同。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{alltt}
\begin{document}
\begin{alltt}
S = \(\emptyset\)
while ((not ottimo(S) ) and (C \(\ne\) \(\emptyset\)))
x = seleziona(C)
C = C – \{x\}
if (ammissibile(S U \{x\}))
S = S U \{x\}
if (ottimo(S))
return S
else
return \(\emptyset\)
\end{alltt}
\end{document}
您可能想要使用algpseudocode
为此目的提供可定制功能的软件包。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{algpseudocode}
\usepackage{amsmath}
\newcommand{\fun}[1]{\mathrm{#1}}% functions
\newcommand{\NOT}{\operatorname{not}}
\newcommand{\AND}{\mathbin{\mathrm{and}}}
\begin{document}
\begin{algorithmic}[1]
\State $S = \emptyset$
\While{$(\NOT \fun{ottimo}(S) ) \AND (C \ne\emptyset)$}
\State $x = \fun{seleziona}(C)$
\State $C = C - \{x\}$
\If{$(\fun{ammissibile}(S\cup \{x\}))$}
\State $S = S \cup \{x\}$
\If{$(\fun{ottimo}(S))$}
\State return $S$
\Else
\State return $\emptyset$
\EndIf
\EndIf
\EndWhile
\end{algorithmic}
\end{document}
答案2
如果您加载fontspec
,仅使用 Unicode 符号而不使用 LaTeX 命令,并选择包含所有这些符号的等宽字体,则可以使用verbatim
。
\tracinglostchars=2 % Warn if a glyph is missing from the font!
\documentclass{article}
\usepackage{fontspec}
\setmonofont{DejaVu Sans Mono}
\pagestyle{empty} % Suppress page numbering for MWE.
\begin{document}
\begin{verbatim}
S = Ø
while ((not ottimo(S)) and (C ≠ Ø))
x = seleziona(C)
C = C – {x}
if (ammissibile(S ∪ {x}))
S = S ∪ {x}
if (ottimo(S))
return S
else
return Ø
\end{verbatim}
\end{document}
您无法进入数学模式或使用 中的命令verbatim
。有几个软件包的伪代码格式比这更有吸引力,但这是获得复古外观的一种方法。