
wrapfigure
Ich 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:
Meine Probleme sind:
- Ich weiß nicht, wie ich Referenzen so bekomme, wie sie in meiner vorherigen Umgebung funktionierten. Wie Sie sehen, verwendet meine alte Umgebung
renewcommand
und ,phantomsection
um den Beschriftungstext zuzuweisen, sodass Referenzen auf eine Seitenleiste einfach den Titel der Seitenleiste ausdrucken (mitnameref
). Ich habe keine Ahnung, wie ich dasselbe mit erreichen kannnewtcolorbox
. - In ähnlicher Weise habe ich früher
colorlet
die Farbe für die Inline-Code-Ausgabe durch dencode
Befehl überschrieben. Ich vermute, dass dies eine Variante von Frage 1 ist, aber ich bin mir nicht sicher, wo ichsetzendiese Logik verwende ich jetztnewtcolorbox
.
Kann jemand helfen?
Antwort1
Zur Problematik falscher nameref
Quellenangaben können Sie den \nameref
Schlü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 counter
als 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}