
Kann eine Routine erstellt werden – ähnlich denen für \chapter, \section, \subsection, d. h. mit einer Reihe von Parametern Nr. 2 und Nr. 1 – um die Felder zu steuern, die zum Hervorheben einer Reihe von Abbildungen verwendet werden? In meinem MWE unten füge ich ein Beispiel ein, wie das Endergebnis aussehen soll. Könnten, wenn möglich, die Längen (Breiten) der Bilder und nummerierten Bildunterschriften automatisch von der Routine erkannt werden?
\documentclass[english,11pt]{book}
%
\usepackage[fleqn]{amsmath} %
\usepackage{amsthm,amssymb} %
\usepackage[explicit]{titlesec}
\usepackage{titletoc} %
\usepackage[english]{babel} %
\usepackage{xcolor} %
\usepackage{colortbl} %
\usepackage{graphicx}
\usepackage{tikz}
\usepackage[skins,theorems,most]{tcolorbox} %
\usepackage{caption} %
\usepackage[margin=6pt,font+=smaller,labelformat=parens,labelsep=space,skip=2.4pt,list=false,hypcap=false]{subcaption}
\usepackage[paperwidth=170mm,paperheight=240mm,bindingoffset=12.5mm,left=12.5mm,right=12.5mm,top=8mm,bottom=8mm,showframe,showcrop]{geometry}
\usepackage[a4,frame,cam,center]{crop} %
\usepackage{newtxtext} %
\usepackage{cellspace}
\usepackage{mwe} %
\usepackage{refcount} %
\usepackage{hyperref}
\frontmatter
\addto\captionsenglish{
\renewcommand{\figurename}{Fig\hspace{0.8pt}.}
\renewcommand{\thefigure}{\thechapter\hspace{1.0pt}.\hspace{0.6pt}\arabic{figure}} }
\newtcolorbox{sectionbox}[2][]{nobeforeafter, boxsep=4.4pt,boxrule=1.6pt,arc=3pt,outer arc=3.2pt,
width=\linewidth, coltitle=white,colbacktitle=red!60!black,after=\hfill,colframe=black,colback=white,
title={#2},fonttitle=\bfseries,#1} %
\titleformat{\section}{}{}{0pt} %
{\begin{sectionbox}
{\fontsize{16}{18}\selectfont{Section\hspace{5.6pt}\thetitle}}
{\normalfont\fontsize{12}{12.8}\selectfont{#1}\vspace{-2.4pt}} %
\end{sectionbox}}
\renewcommand{\thesection}{\arabic{section}} %
\titlespacing{\section}{0pt}{15.35pt}{4pt}[0pt] % from left, before, after, [0pt]
\newtcolorbox[]{outerbox}[2][]
{boxrule=1.6pt,arc=1.2pt,coltitle=red!50!black,colbacktitle=pink,colback=gray,colframe=red,
every float=\centering,title={#2},#1}
\newtcolorbox[]{innerbox}[2][]
{boxsep=2pt,boxrule=0.7pt,arc=2pt,coltitle=red!50!black,colbacktitle=gray,
colback=white,colframe=black,fonttitle=\bfseries, title={#2},#1}
\begin{document}
\setcounter{chapter}{4}
\chapter{Chapter $\thechapter$}
\section{Using my graphic - please edit example-image-a} % my image=127.5mm wide
\begin{figure}[htp]
\begin{outerbox}[width=\textwidth-2mm]
\noindent\includegraphics[scale=1.00]{../math_text/chap_01_intro_to_number_figs/fig_40_step_forward}
%\noindent\includegraphics[width=45mm]{example-image-a}
\begin{innerbox}[width=80mm]
\caption{ - \hspace{0.6pt}using the preamble - gives errors}
\end{innerbox}
\end{outerbox}
\label{fig:a_figure}
\end{figure}
\begin{figure}[htp]
\centering
\begin{tcolorbox}
[width=131mm,colframe=red!50!black,colback=gray,top=0pt,bottom=0pt,left=1.0pt,right=1.0pt,boxrule=1.6pt]
\centering
\noindent\includegraphics[scale=1.00]{../math_text/chap_01_intro_to_number_figs/fig_40_step_forward}
%\noindent\includegraphics[width=45mm]{example-image-a}
\begin{tcolorbox}[center,width=87mm,height=7.2mm,top=1pt,left=1pt,right=1pt,colframe=black,colback=white,boxrule=0.7pt]
\caption{- \hspace{0.6pt}using direct coding after begin document}
\end{tcolorbox}
\end{tcolorbox}
\label{fig:another_figure}
\end{figure}
\end{document}
Antwort1
Antwort2
Ich bin nicht sicher, was Sie genau möchten, da Sie die in Ihrem Code verwendeten Farben ein paar Mal geändert haben und die Optionen für die Innerbox und die Outerbox bei Ihren Versuchen nicht dieselben sind, aber ich denke, dies bringt Sie der Sache näher und gibt Ihnen einen Ausgangspunkt.
Ihr Code funktioniert teilweise nicht richtig, weil Sie die title=
Option verwenden, aber anscheinend keine Titel verwenden möchten.
Ich schlage jedoch vor, einen noch kompakteren Weg zu wählen.
Das Definieren von benutzerdefinierten Befehlen, die Umgebungen enthalten, die mit erstellt wurden, \newtcolorbox
funktioniert nicht besonders gut. Ich schlage vor, einfach \NewDocumentCommand
eine reguläre tcolorbox-Umgebung darin zu verwenden. Da sie sich in einem definierten Befehl befindet, müssen Sie die Optionen nicht jedes Mal separat hinzufügen. Bei jedem Aufruf des Befehls werden dieselben verwendet.
Der folgende Code definiert einen Befehl \myimagebox
, der drei Argumente annimmt: den Namen eines Bildes, den Beschriftungstext und ein Label, das für Querverweise verwendet werden soll.
Es bestimmt die Breite des Bildes und der Beschriftung und erstellt Kästen der entsprechenden Größe.
Sie können, müssen aber nicht, ein optionales viertes Argument übergeben [
und ]
auch, wenn Sie dem \includegraphics
Befehl darin zusätzliche Argumente übergeben möchten. Damit können Sie bei Bedarf die Größe und andere Eigenschaften des Bildes manuell anpassen.
(Mit dieser Einstellung sehen Bilder, die größer als etwa 120 mm sind, nicht gut aus, da nicht genug Platz vorhanden ist, damit die Boxen eine ähnliche Polsterung wie die anderen Boxen haben. Daher möchten Sie die Bildgröße manchmal mit dieser Methode optimieren. In anderen Fällen wird die natürliche Größe des Bildes verwendet und die Box auf dieser Grundlage berechnet.)
\documentclass[english,11pt]{book}
%
\usepackage[fleqn]{amsmath} %
\usepackage{amsthm,amssymb} %
\usepackage[explicit]{titlesec}
\usepackage{titletoc} %
\usepackage[english]{babel} %
\usepackage{xcolor} %
\usepackage{colortbl} %
\usepackage{graphicx}
\usepackage{tikz}
\usepackage[skins,theorems,most]{tcolorbox} %
\usepackage{caption} %
\usepackage[margin=6pt,font+=smaller,labelformat=parens,labelsep=space,skip=2.4pt,list=false,hypcap=false]{subcaption}
\usepackage[paperwidth=170mm,paperheight=240mm,bindingoffset=12.5mm,left=12.5mm,right=12.5mm,top=8mm,bottom=8mm,showframe,showcrop]{geometry}
\usepackage[a4,frame,cam,center]{crop} %
\usepackage{newtxtext} %
\usepackage{cellspace}
\usepackage{mwe} %
\usepackage{refcount} %
\usepackage{hyperref}
\addto\captionsenglish{
\renewcommand{\figurename}{Fig\hspace{0.8pt}.}
\renewcommand{\thefigure}{\thechapter\hspace{1.0pt}.\hspace{0.6pt}\arabic{figure}} }
\newtcolorbox{sectionbox}[2][]{nobeforeafter, boxsep=4.4pt,boxrule=1.6pt,arc=3pt,outer arc=3.2pt,
width=\linewidth, coltitle=white,colbacktitle=red!60!black,after=\hfill,colframe=black,colback=white,
title={#2},fonttitle=\bfseries,#1} %
\titleformat{\section}{}{}{0pt} %
{\begin{sectionbox}
{\fontsize{16}{18}\selectfont{Section\hspace{5.6pt}\thetitle}}
{\normalfont\fontsize{12}{12.8}\selectfont{#1}\vspace{-2.4pt}} %
\end{sectionbox}}
\renewcommand{\thesection}{\arabic{section}} %
\titlespacing{\section}{0pt}{15.35pt}{4pt}[0pt] % from left, before, after, [0pt]
% some lengths and a counter we'll need later
\newlength{\captionwidth}
\newlength{\innerboxwidth}
\newlength{\imagewidth}
\newlength{\outerboxwidth}
\newcounter{fakefigure}
\NewDocumentCommand{\myimagebox}{mmmo}{
% a fake counter to use to calculate width of caption
% which will be one more than current
\setcounter{fakefigure}{\value{figure}}
\stepcounter{fakefigure}
% determine width of caption
\settowidth{\captionwidth}{Fig.~\thefakefigure: #2}
% determine innerbox size by adding to captionwidth
\setlength{\innerboxwidth}{\captionwidth}
\addtolength{\innerboxwidth}{10mm}
% determine width of image
\IfValueTF{#4}{%
\settowidth{\imagewidth}{\includegraphics[#4]{#1}}%
}{%
\settowidth{\imagewidth}{\includegraphics{#1}}%
}%
% outerbox determined by max of those two widths
\setlength{\outerboxwidth}{\maxof{\innerboxwidth}{\imagewidth}}
\addtolength{\outerboxwidth}{20mm}
% but not above \textwidth
\setlength{\outerboxwidth}{\minof{\outerboxwidth}{\textwidth}}
\begin{figure}[htp]%
\centering%
% outerbox
\begin{tcolorbox}[
center,
width=\outerboxwidth,
coltitle=red!50!black,
colframe=red!50!black,
colbacktitle=pink,
colback=gray,
top=0pt,
bottom=0pt,
every float=\centering
]%
\centering%
\IfValueTF{#4}{%
\includegraphics[#4]{#1}%
}{%
\includegraphics{#1}%
}%
% innerbox
\begin{tcolorbox}[center,top=1pt,bottom=-10pt,left=1pt,right=1pt,%
width=\innerboxwidth,
colframe=black,colback=white,boxrule=0.7pt]%
\caption{#2}\label{#3}
\end{tcolorbox}
\end{tcolorbox}
\end{figure}
}
\usepackage{lipsum}% for dummy text
\title{Document Title}
\author{Someone P. Someone}
\date{\today}
\begin{document}
\frontmatter
\maketitle
\mainmatter
\setcounter{chapter}{4}
\chapter{Chapter \thechapter}
\section{Using my graphic - please edit example-image-a} % my image=127.5mm wide
\myimagebox{sample100mm.png}{An 100mm example}{fig:samp1}
\lipsum[1]% dummy text
\myimagebox{sample50mm.png}{A 50mm example}{fig:samp2}
\lipsum[9]
\myimagebox{example-image-a}{This is my example with a longer caption}{fig:ex1}[width=50mm]
\lipsum[2]% dummy text
As seen in figures \ref{fig:samp1} and \ref{fig:ex1} ...
\end{document}
Die Sachen, die ich hinzugefügt habe, beginnen ungefähr beim Kommentar % some lengths and a counter we'll need later
.
Ich bin umgezogen \frontmatter
, weil die Präambel keinen Sinn ergibt.