Verwenden von tcolorbox für eine Seitenleiste

Verwenden von tcolorbox für eine Seitenleiste

wrapfigureIch versuche, eine Sidebar-Umgebung, die auf und dergleichen basiert, in etwas umzuschreiben, das auf basiert tcolorbox. Ich bin dabei jedoch auf einige Probleme gestoßen.

Als Referenz hier meine alte Umgebung:

\makeatletter
\newenvironment*{sidebar}[3][0.5\textwidth]
{
    % less vertical margin around wrapfigures
    \setlength{\intextsep}{0pt}
    \colorlet{savedcolor}{inline code}
    \colorlet{inline code}{inline code inverted}
    \renewcommand{\dummy}{#1}
    \wrapfigure{#2}{#1}
        \renewcommand{\@currentlabel}{#3}
        \renewcommand{\@currentlabelname}{#3}
        \phantomsection
        \rule{#1}{1pt}

        \rule{#1}{18pt}

        \vspace{-18pt}
        \centerline{\textcolor{white}{#3}}

        \vspace{5pt}
        \footnotesize
        \leftskip=5pt
        \rightskip=5pt
        \setlength{\parskip}{0.2cm}
        \setlength{\parindent}{0pt}
        % restore the inline code color for the body of the bar
        \colorlet{inline code}{savedcolor}
}
{

        \leftskip=0pt
        \rightskip=0pt
        \setlength{\parindent}{0pt}
        \rule{\dummy}{1pt}
        \rule[.19in]{\dummy}{2.5pt}
    \endwrapfigure
}
\makeatother

Es funktioniert, ist aber alles andere als schön. Deshalb möchte ich verwenden tcolorbox, da ich damit in anderen Kontexten gute Erfahrungen gemacht habe.

Hier ist ein MWE von dem, was ich bisher habe:

% !TEX program = xelatex

\documentclass{scrbook}

\usepackage{wrapfig}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{tcolorbox}
\usepackage{listings}
\usepackage{blindtext}
\usepackage{hyperref}

\definecolor{inline code}{RGB}{194,61,53}
\definecolor{inline code inverted}{RGB}{193,153,151}

\newcommand*{\code}{\lstinline[basicstyle=\fontsize{9}{11}\ttfamily\color{inline code},keywordstyle=\color{inline code},stringstyle=\color{inline code},keepspaces=true]}

\newtcolorbox{cbar}[2][]{
    parbox=false, % normal paragraph spacing
    height from=2.5cm to 100cm,
    halign=justify,
    sharp corners,
    colframe=black,
    colback=black!15!white,
    fontupper=\tiny,% font size for body of text
    title=\scriptsize \textsc{#2},
    #1
}

\begin{document}

\begin{cbar}[label=lab:testing]{Test Bar (some \code{Code})}
    Here is a test bar with some \code{Code}.

    \blindtext
\end{cbar}

Hello, \code{code}. And here is a reference to \ref{lab:testing}, which has name \nameref{lab:testing}.

\end{document}

Und so wird es gerendert:

Bildbeschreibung hier eingeben

Meine Probleme sind:

  1. Ich weiß nicht, wie ich Referenzen so bekomme, wie sie in meiner vorherigen Umgebung funktionierten. Wie Sie sehen, verwendet meine alte Umgebung renewcommandund , phantomsectionum den Beschriftungstext zuzuweisen, sodass Referenzen auf eine Seitenleiste einfach den Titel der Seitenleiste ausdrucken (mit nameref). Ich habe keine Ahnung, wie ich dasselbe mit erreichen kann newtcolorbox.
  2. In ähnlicher Weise habe ich früher colorletdie Farbe für die Inline-Code-Ausgabe durch den codeBefehl überschrieben. Ich vermute, dass dies eine Variante von Frage 1 ist, aber ich bin mir nicht sicher, wo ichsetzendiese Logik verwende ich jetzt newtcolorbox.

Kann jemand helfen?

Antwort1

Zur Problematik falscher namerefQuellenangaben können Sie den \namerefSchlüssel verwenden, der im Titel hinterlegt werden kann.

Da kein Zähler beteiligt ist, label=hat er keinen Griff, um etwas Nützliches zu tun. Stellen Sie es auto counterals Initialisierungsoption der neuen Boxdefinition bereit.

\documentclass{scrbook}

\usepackage{wrapfig}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{tcolorbox}
\usepackage{listings}
\usepackage{blindtext}
\usepackage{hyperref}

\definecolor{inline code}{RGB}{194,61,53}
\definecolor{inline code inverted}{RGB}{193,153,151}

\newcommand*{\code}{\lstinline[basicstyle=\fontsize{9}{11}\ttfamily\color{inline code},keywordstyle=\color{inline code},stringstyle=\color{inline code},keepspaces=true]}

\newtcolorbox[auto counter]{cbar}[2][]{
    parbox=false, % normal paragraph spacing
    height from=2.5cm to 100cm,
    halign=justify,
    sharp corners,
    colframe=black,
    colback=black!15!white,
    fontupper=\tiny,% font size for body of text
    title={\thetcbcounter\ \scriptsize \textsc{#2}},
    nameref={\scriptsize \textsc{#2}},
    #1
}

\begin{document}

\begin{cbar}[label=lab:testing]{Test Bar (some \code{Code})}
    Here is a test bar with some \code{Code}.

    \blindtext
\end{cbar}

Hello, \code{code}. And here is a reference to \ref{lab:testing}, which has name \nameref{lab:testing}.

\end{document}

verwandte Informationen