如何重命名 \cref{} 以进行 lstlisting

如何重命名 \cref{} 以进行 lstlisting

目前我正在撰写我的文凭论文,经过长时间的搜索和尝试,我仍然无法找到解决我的问题的方法。

长话短说:我想参考一下列表-enviroment 通过 \cref{} 并且我想更改显示的名称。我已经对其他一些环境执行了此操作:

\renewcommand\figureautorefname{Abbildung}
\renewcommand\tableautorefname{Tabelle}
\renewcommand\sectionautorefname{Kapitel}
\renewcommand\subsectionautorefname{Kapitel}
\renewcommand\equationautorefname{Gleichung}

我需要使用 \cref{} 因为我为第一次使用 \cref{} 实现了一种特殊的格式。

结果应该是这样的:

This is a test-Code: Program-Code 1

代替

This is a test-Code: Listing 1

有人能帮助我吗?

多谢!

克里斯

编辑:我在这篇文章下找到了导致解决方案失败的部分:大学模板中有一部分。在此部分中,为标题页定义了主管/考官的德语/英语术语。如果我在文档环境中选择德语版本,程序代码将再次更改为列表。 :-( 我更新了代码。


以下是我的示例:

\documentclass{scrreprt}

\usepackage[T1]{fontenc}                %% ermöglicht Sonderzeichen
\usepackage{lmodern}                    %% verbessert die Darstellung der Sonderzeichen
\usepackage[ngerman, english]{babel}    %% deutsche oder englische Schreibweisen
\usepackage[utf8]{inputenc}             %% deutsche Tastatur wg. Umlauten
\usepackage[ngerman, english]{babel} 
\usepackage[fixlanguage]{babelbib}

\usepackage{subfig}                     %% Bilder => Unterbilder (a),(b),.. innerhalb einer Figure

\usepackage{hyperref}
\usepackage{xcolor}                     %% farbige Schrift und Schrifthinterlegung

\usepackage{listings}               %% SOURCE CODE
\lstset{%                                                       settings for the listing package:
    numbers=left, numberstyle=\tiny,%                           line numbers
    showstringspaces=false,%
    frame=b, framerule=1pt,%
    aboveskip=0.75\baselineskip, belowskip=0.75\baselineskip,%  space above and below listing
    breaklines, prebreak=\mbox{$\hookleftarrow$},%              break overlong lines and puts prebreak at the end
    stringstyle=\color{cyan}\ttfamily, % Farbe der String
    showspaces=false, % Leerzeichen anzeigen ?
    showtabs=false, % Tabs anzeigen ?
    xleftmargin=17pt,
    framexleftmargin=17pt,
    framexrightmargin=5pt,
    framexbottommargin=4pt,
    commentstyle=\color{8},
    showstringspaces=false, % Leerzeichen in Strings anzeigen ?
    morekeywords={__global__} % CUDA specific keywords
    }
\lstset{
    language=python,
    basicstyle=\ttfamily,
    keywordstyle=\color{orange},
}
\lstloadlanguages{python}
\renewcommand*\lstlistingname{Programm-Code}
\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox{gray}{\parbox{\textwidth}{\hspace{15pt}#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}}

\renewcommand\figureautorefname{Abbildung}
\renewcommand\tableautorefname{Tabelle}
\renewcommand\sectionautorefname{Kapitel}
\renewcommand\subsectionautorefname{Kapitel}
\renewcommand\equationautorefname{Gleichung}

\usepackage[ngerman]{cleveref}
\crefname{listing}{Program-code}{Program-codes}  
\Crefname{listing}{Program-code}{Program-codes}

\usepackage{letltxmacro}
\AtBeginDocument{% 
  \LetLtxMacro\oldref\cref% 
  \renewcommand{\cref}[1]{% 
  \ifcsname[#1]\endcsname\relax%
  {\oldref{#1}}%
  \else%
  {\textbf{\oldref{#1}}%
  }%
  \expandafter\gdef\csname[#1]\endcsname{1}%
  \fi%
  }% 
}

%-----

\declarebtxcommands{english}{%
\def\btxprue#1{\protect\foreignlanguage{english}{Examiner}}%
\def\btxsuper#1{\protect\foreignlanguage{english}{Supervisor}}%
}
\declarebtxcommands{ngerman}{%
\def\btxprue#1{\protect\foreignlanguage{ngerman}{Prüfer}}%
\def\btxsuper#1{\protect\foreignlanguage{ngerman}{Hochschulbetreuer}}%
}

\declarebtxcommands{ngerman}{%
\renewcommand{\figurename}{Abb.}
\renewcommand{\tablename}{Tab.}
}
\declarebtxcommands{english}{%
\renewcommand{\figurename}{Fig.}
\renewcommand{\tablename}{Tab.}
}
%-----

\begin{document}
%% SPRACHAUSWAHL VOR TEXTBEGINN
\selectlanguage{ngerman}   % <-------
%\selectlanguage{english}
\selectbiblanguage{ngerman}
%%\selectbiblanguage{english}


This is a test-Code: \cref{lst:example1}\\
second reference: \cref{lst:example1}
\begin{lstlisting}[caption={Test},label={lst:example1}]
test
\end{lstlisting}

Beispieltabelle: \cref{tab:test}\\
second reference: \cref{tab:test}
\begin{table}[h]
\centering
 \captionabove{test-table}
 \begin{tabular}{|c|c|}
 \hline
 hello & world \\
 \hline
 \end{tabular}
\label{tab:test}
 \end{table}
\end{document}

答案1

\crefname{listing}{Program-code}{Program-codes}  
\Crefname{listing}{Program-code}{Program-codes}

在 后添加此行\usepackage{cleveref}。第一行重新定义 所用的单词(单数和复数)\cref,第二行重新定义 所用的单词(单数和复数) \Cref

对于您的情况,与语言选择命令存在一些冲突。(手册第 10 节中babel有一些讨论。)添加babelcleveref\crefname 似乎\selectlanguage解决了这个问题。最小示例:

\documentclass{scrreprt}
\usepackage[ngerman,english]{babel}    
\usepackage{babelbib}

\usepackage{listings}               
\usepackage[ngerman]{cleveref}


\begin{document}
\selectlanguage{ngerman}   % <-------
%\selectlanguage{english}
\crefname{listing}{Program-code}{Program-codes}  
\Crefname{listing}{Program-code}{Program-codes}

This is a test-Code: \cref{lst:example1}
\begin{lstlisting}[caption={Test},label={lst:example1}]
test
\end{lstlisting}

\end{document}

相关内容