
Estoy intentando reescribir un entorno de barra lateral que tengo wrapfigure
y que se basa en algo basado en tcolorbox
. Sin embargo, me he encontrado con un par de problemas.
Como referencia, aquí está mi antiguo entorno:
\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
Funciona, pero está lejos de ser bonito. Es por eso que estoy buscando usarlo tcolorbox
, ya que he tenido mucho éxito usándolo en otros contextos.
Aquí hay un MWE de lo que tengo hasta ahora:
% !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}
Y así es como se representa:
Mis problemas son:
- No sé cómo conseguir referencias para trabajar como lo hacían en mi entorno anterior. Como puede ver, mi antiguo entorno utiliza
renewcommand
yphantomsection
para asignar el texto de la etiqueta de modo que las referencias a una barra lateral simplemente impriman el título de la barra lateral (usandonameref
). No tengo idea de cómo lograr lo mismo connewtcolorbox
. - De manera similar, anteriormente solía
colorlet
anular el color de la salida del código en línea mediante elcode
comando. Sospecho que esta es una variación de la pregunta 1, pero no estoy seguro de dóndeponerEsta lógica ahora que estoy usandonewtcolorbox
.
¿Alguien puede ayudar?
Respuesta1
Para el problema con la nameref
referencia incorrecta, use la \nameref
clave, que se puede configurar en el título.
Como no hay ningún contraataque involucrado, label=
no tiene agarre para hacer nada útil. Proporcione auto counter
como opción de inicio de la nueva definición de cuadro.
\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}