参考 \lstnewenvironment

参考 \lstnewenvironment
\documentclass{scrreprt}
\usepackage{regexpatch}% http://ctan.org/pkg/regexpatch
\usepackage{color}

\definecolor{codecolor}{rgb}{0.8,0.9,0.9}
\definecolor{chatcolor}{rgb}{0.9,0.9,0.8}
\usepackage{listings}% http://ctan.org/pkg/listings


\makeatletter
% --------------------------------------- Chat-Auszug
\definecolor{chatbackcolor}{rgb}{0.95,0.95,0.92}
\newcommand{\lstlistchatname}{Chat-Auszug}
\lst@UserCommand\lstlistofchat{\bgroup
    \let\contentsname\lstlistchatname
    \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{loc}}%
    \tableofcontents \egroup}
\lstnewenvironment{chat}[1][]{%
  \renewcommand{\lstlistingname}{Chat}% 
  \xpatchcmd*{\lst@MakeCaption}{lol}{loc}{}{}%
  \lstset{
  backgroundcolor=\color{chatbackcolor},
  showstringspaces=false,
  %framexleftmargin = 2em,
  xleftmargin = 1cm,
  xrightmargin = 1cm,
  extendedchars=true,
  captionpos=b,
  basicstyle=\small\rmfamily,
  %basicstyle=\footnotesize\ttfamily,
  tabsize=2,
  keywordstyle=\textbf,
  stringstyle=\textit,
  numbers=none,
  numberstyle=\small,
  % für schönen Zeilenumbruch
  breakautoindent  = true,
  breakindent      = 2em,
  breaklines       = true,
  postbreak        = ,
  prebreak         = \raisebox{-.8ex}[0ex][0ex]{\Righttorque},
  frameround=ftff,
  frame=single,
  literate={ö}{{\"o}}1
           {ä}{{\"a}}1
           {ü}{{\"u}}1, #1
}}{}

% linksbündige Fußboten
\deffootnote{1.5em}{1em}{\makebox[1.5em][l]{\thefootnotemark}}

\typearea{14} % typearea berechnet einen sinnvollen Satzspiegel (das heißt die Seitenränder) siehe auch http://www.ctan.org/pkg/typearea. Diese Berechnung befindet sich am Schluss, damit die Einstellungen oben berücksichtigt werden

\usepackage{scrhack} % Vermeidung einer Warnung

\begin{document}

\chapter{My first chapter}
\section{first}
\section{second}

\begin{chat}[caption={Greeting with hello}\label{chat-greeting}]
    Sadik: Hello
\end{chat}

As shown in \ref{chat-greeting} on page \pageref{chat-greeting} ...

\end{document}

我已经定义了一个\lstnewenvironment名为 的环境(带有 )chat。我想用 引用此环境\ref{label name}。但\ref返回的是章节编号而不是列表编号。在这种情况下,它显示2,但这1.1是预期的。

有些帖子提到了 refstepcounter,但我未能正确使用它(而且我不知道它是否有用)

在此处输入图片描述

答案1

您需要listingslabel={....},而不是\label。该\label命令将引用部分(之前已排版),因为这是开始行动(应用计数器)之前2使用的最后一个计数器\refstepcountercaptionlistings

\documentclass{scrreprt}
\usepackage{regexpatch}% http://ctan.org/pkg/regexpatch
\usepackage{color}

\definecolor{codecolor}{rgb}{0.8,0.9,0.9}
\definecolor{chatcolor}{rgb}{0.9,0.9,0.8}
\usepackage{listings}% http://ctan.org/pkg/listings


\makeatletter
% --------------------------------------- Chat-Auszug
\definecolor{chatbackcolor}{rgb}{0.95,0.95,0.92}
\newcommand{\lstlistchatname}{Chat-Auszug}
\lst@UserCommand\lstlistofchat{\bgroup
    \let\contentsname\lstlistchatname
    \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{loc}}%
    \tableofcontents \egroup}
\lstnewenvironment{chat}[1][]{%
  \renewcommand{\lstlistingname}{Chat}% 
  \xpatchcmd*{\lst@MakeCaption}{lol}{loc}{}{}%
  \lstset{
  backgroundcolor=\color{chatbackcolor},
  showstringspaces=false,
  %framexleftmargin = 2em,
  xleftmargin = 1cm,
  xrightmargin = 1cm,
  extendedchars=true,
  captionpos=b,
  basicstyle=\small\rmfamily,
  %basicstyle=\footnotesize\ttfamily,
  tabsize=2,
  keywordstyle=\textbf,
  stringstyle=\textit,
  numbers=none,
  numberstyle=\small,
  % für schönen Zeilenumbruch
  breakautoindent  = true,
  breakindent      = 2em,
  breaklines       = true,
  postbreak        = ,
%  prebreak         = \raisebox{-.8ex}[0ex][0ex]{\Righttorque},
  frameround=ftff,
  frame=single,
  literate={ö}{{\"o}}1
           {ä}{{\"a}}1
           {ü}{{\"u}}1, #1
}}{}

% linksbündige Fußboten
\deffootnote{1.5em}{1em}{\makebox[1.5em][l]{\thefootnotemark}}

\typearea{14} % typearea berechnet einen sinnvollen Satzspiegel (das heißt die Seitenränder) siehe auch http://www.ctan.org/pkg/typearea. Diese Berechnung befindet sich am Schluss, damit die Einstellungen oben berücksichtigt werden

\usepackage{scrhack} % Vermeidung einer Warnung

\begin{document}

\chapter{My first chapter}
\section{first}
\section{second}

\begin{chat}[caption={Greeting with hello},label={chat-greeting}]
    Sadik: Hello
\end{chat}

As shown in \ref{chat-greeting} on page \pageref{chat-greeting} ...

\end{document}

在此处输入图片描述

相关内容