在我的伪代码中添加空集

在我的伪代码中添加空集

我正在尝试使用编写一些伪代码逐字。问题是,我无法让它写出正确的符号。这是我的代码:

\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}

DejaVu Sans Mono 样本

您无法进入数学模式或使用 中的命令verbatim。有几个软件包的伪代码格式比这更有吸引力,但这是获得复古外观的一种方法。

相关内容