Wie fügt man ein mathematisches Symbol in die Lstlisting-Umgebung in Beamer ein?

Wie fügt man ein mathematisches Symbol in die Lstlisting-Umgebung in Beamer ein?

Bildbeschreibung hier eingeben

Ich möchte den obigen Algorithmus in den Beamer-Block eingeben, aber beim Einfügen hänge ich fest mathcal symbols. Ich habe es $\mathcal{Q}$mit und versucht \mathcal{Q}, aber beide haben das erwartete Symbol nicht zurückgegeben.

Mein MWE:

\documentclass{beamer}
\usepackage{listings}
\usetheme{Madrid}
%\lstset{language=Python}

\begin{document}
\begin{frame}[fragile]
\begin{block}{Algorithm}
\begin{lstlisting}
$\mathcal{Q}$
  for i in range(10):
      foo(arg1, arg2)
  bar = qux()
\end{lstlisting}
\end{block}
\end{frame}
\end{document}

Aktualisieren

\documentclass{beamer}
\usetheme{Madrid}
\usepackage{algpseudocode}
%this code is from: https://tex.stackexchange.com/a/353165/101651
\algnewcommand\algorithmicinput{\textbf{Input:}}
\algnewcommand\algorithmicoutput{\textbf{Output:}}
\algnewcommand\Input{\item[\algorithmicinput]}%
\algnewcommand\Output{\item[\algorithmicoutput]}%

\begin{document}
\begin{frame}[fragile]
    \begin{block}{Algorithm}
        \begin{algorithmic}
      Input: $\mathcal{Q}_{\text{init}}$, \mathcal{A}, and \textit{f}(c).
    Initialize: Obtain \writetilde{c_{i}} by solving frac{\delta f(c)}{\delta c_{i}}=0, for i\in\mathcal{N}.Set k = 1, \mathcal{B} = \mathcal{Q}_{init},\mathcal{u}_{i}=\gamma_{ub}(\mathcal{Q}_{init} and \mathcal{l}_{1} = \gamma_\left\{ lb}(\]mathcal{Q}_{init}.
      Check the feasibility of problem (17) with given \writetilde{c}.
      if feasible then
      c_{0} = \writetilde{c};
      else
      while u_{k} - l_{k} > \epsilon do
      Branching:
      \begin{itemize}
        \item Set \mathcal{Q}_{k} = \mathcal{Q}, where \mathcal{Q} satisfies \gamma_\left\{ lb}(\mathcal{Q} = l_{k}.
          \item Split \mathcal{Q} into \mathcal{Q}_{\rm{I}} and \mathcal{Q}_{\rm{II}}, along one of its longest edges.
          \item Update \mathcal{B}_{k+1} = (\mathcal{B}_{k}\{\mathcal{Q}_{k}}) \union (\mathcal{Q}_{\rm{I}}, \mathcal{Q}_{\rm{II}}.
      \end{itemize}
      Bounding:
      \begin{itemize}
        \item Update \mathcal{u}_{k+1} = \min_{\mathcal{Q}\in\mathcal{B}_{k+1}{\gamma_{ub}(\mathcal{Q})}
        \item Update \mathcal{l}_{k+1} = \min_{\mathcal{Q}\in\mathcal{B}_{k+1}{\gamma_{lb}(\mathcal{Q})}
      \end{itemize}
      Set k=k+1;
      end while
      Set c_{0} = c_{min};
      end if
      Output: c_{0}.
        \end{algorithmic}
    \end{block}
\end{frame}
\end{document}

Ich habe den obigen Algorithmus mit zahlreichen Fehlern eingegeben. Ich habe diesen Algorithmustyp zunächst in LaTeX eingegeben. Wenn mir also jemand den erwarteten Code gibt und diesen Code bearbeitet, um das Ergebnis wie diesen Algorithmus zu erhalten, dann ist das für mich sehr hilfreich.

Antwort1

Das Problem ist, dass es sich um eine wörtliche Umgebung handelt.allesist wörtlich. Um es zu machennichtwörtlich müssen Sie die Option verwenden escapeinside:

\lstset{escapeinside={@(}{)@}}

sodass jeglicher Code dazwischen @(...)@wieder in LaTeX umgewandelt wird.

Um Mehrdeutigkeiten zu vermeiden, sollten Sie am besten mehr als ein Zeichen zum Escapen verwenden. Versuchen Sie außerdem, eine Kombination zu wählen, die in Ihrem Code nicht vorkommt. In Python wäre die Verwendung beispielsweise :(...):aufgrund der Syntax der forSchleife keine gute Idee.

Bildbeschreibung hier eingeben

\documentclass{beamer}
\usepackage{listings}
\usetheme{Madrid}
%\lstset{language=Python}
\lstset{escapeinside={@(}{)@}}

\begin{document}
\begin{frame}[fragile]
\begin{block}{Algorithm}
\begin{lstlisting}
@($\mathcal{Q}$)@
  for i in range(10):
      foo(arg1, arg2)
  bar = qux()
\end{lstlisting}
\end{block}
\end{frame}
\end{document}

Antwort2

Da der OP gerne ein Beispiel für einen Algorithmus sehen würde …

Der Code für \Inputstammt voneine Antwort von Gernot.

\documentclass{beamer}
\usetheme{Madrid}
\usepackage{algpseudocode}
%this code is from: https://tex.stackexchange.com/a/353165/101651
\algnewcommand\algorithmicinput{\textbf{Input:}}
\algnewcommand\algorithmicoutput{\textbf{Output:}}
\algnewcommand\Input{\item[\algorithmicinput]}%
\algnewcommand\Output{\item[\algorithmicoutput]}%

\begin{document}
\begin{frame}[fragile]
    \begin{block}{Algorithm}
        \begin{algorithmic}
            \Input $\mathcal{Q}_{\text{inn}}$
            \For{$i=0$ to $10$}
            \State do something with arg1 and arg2
            \State $bar \leftarrow qux()$
            \EndFor
        \end{algorithmic}
    \end{block}
\end{frame}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen