Beschreibungsdefinitionen und nTheorem

Beschreibungsdefinitionen und nTheorem

Ich möchte Inline-Auflistungen in Beschreibungselementen haben, also habe ich dies verwendet sehr schöne Antwort. Leider zerstört dieser Hack meine Theoremumgebungen mit Fehlernsomething's wrong--perhaps a missing \item

Hier ist das MWE, das das Problem zeigt:

\documentclass{article}
\makeatletter
%%inline listings in description items
\let\orig@item\item

\def\item{%
    \@ifnextchar{[}%
        {\lstinline@item}%
        {\orig@item}%
}

\begingroup
\catcode`\]=\active
\gdef\lstinline@item[{%
    \setbox0\hbox\bgroup
        \catcode`\]=\active
        \let]\lstinline@item@end
}
\endgroup

\def\lstinline@item@end{%
    \egroup
    \orig@item[\usebox0]%
}
\makeatother

\usepackage{listings}
\lstloadlanguages{C++}
    \lstset{
        basicstyle=\ttfamily,
    }
\usepackage{ntheorem}
\newtheorem{theorem}{Theorem}

\begin{document}
\section{Descriptions}
\begin{description}
\item[\lstinline{some verb text}] here is text
\item[\lstinline{some more}] more text
\end{description}
\section{Theorems}
\begin{theorem}[A Named theorem]
\begin{equation}
    e^x = \sum_{k=1}^\infty \frac{x^k}{k!}
\end{equation}         
\end{theorem}
\end{document}

Gibt es eine Möglichkeit, beide Dinge zu verwenden, ohne dass es zu Störungen kommt?

Antwort1

Ich würde nicht den Ansatz der Neudefinition verwenden \item, sondern lieber einen speziellen Befehl für Elemente verwenden, die verwenden möchten \lstinline:

\documentclass{article}

\usepackage{ntheorem}
\usepackage{listings}

\makeatletter
%%inline listings in description items; it's a modified version of \lstinline
\newcommand\lstinlineitem[1][]{%
  \setbox0=\hbox\bgroup % \lstinline has \leavevmode\bgroup
  \aftergroup\finish@off@lstinlineitem % do something after building the box
  \def\lst@boxpos{b}%
  \lsthk@PreSet\lstset{flexiblecolumns,#1}%
  \lsthk@TextStyle
  \@ifnextchar\bgroup{\afterassignment\lst@InlineG \let\@let@token}%
  \lstinline@}
\def\finish@off@lstinlineitem{\item[\usebox0]} % output the \item
\makeatother

\lstloadlanguages{C++}
    \lstset{
        basicstyle=\ttfamily,
    }

\newtheorem{theorem}{Theorem}

\begin{document}

\section{Descriptions}

\begin{description}
\lstinlineitem{some verb text} here is text

\lstinlineitem!some verb %text! here is text

\lstinlineitem[basicstyle=\sffamily]+some more+ more text
\end{description}
\section{Theorems}
\begin{theorem}[A Named theorem]
\begin{equation}
    e^x = \sum_{k=1}^\infty \frac{x^k}{k!}
\end{equation}         
\end{theorem}
\end{document}

Wie Sie sehen, ist die gesamte Syntax \lstinlineverfügbar.

Bildbeschreibung hier eingeben

verwandte Informationen