Как создать код в преамбуле, чтобы получить тот же результат, что и предписанный рисунок в рамке с вложенной подписью и нумерацией

Как создать код в преамбуле, чтобы получить тот же результат, что и предписанный рисунок в рамке с вложенной подписью и нумерацией

Можно ли создать процедуру, похожую на те, что используются для \chapter, \section, \subsection, т. е. содержащую ряд параметров #2, #1, для управления полями, используемыми для выделения ряда рисунков? В моем MWE ниже я включил пример того, как я хотел бы видеть конечный результат. Если возможно, может ли процедура автоматически определять длину (ширину) изображений и пронумерованные подписи?

\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}

решение1

Ваш MWE дает

введите описание изображения здесь

Пожалуйста, объясните, в чем ваша проблема! Я удалю этот ответ после вашего ответа.

решение2

Я не совсем понимаю, чего именно вы хотите, потому что вы несколько раз меняли цвета, используемые в коде, и параметры внутреннего и внешнего блоков в ваших попытках не совпадают, но я думаю, что это приблизит вас к цели и даст отправную точку.

Ваш код работает некорректно отчасти потому, что вы используете эту title=опцию, но, похоже, не хотите использовать заголовки.

Но я предлагаю пойти еще более компактным путем.

Определение пользовательских команд, которые имеют внутри себя среды, созданные с помощью, \newtcolorboxработает не очень хорошо. Я предлагаю просто использовать \NewDocumentCommandс обычной средой tcolorbox внутри; поскольку она находится внутри определенной команды, вам не нужно добавлять опции по отдельности каждый раз; те же самые будут использоваться каждый раз при вызове команды.

Следующий код определяет команду \myimagebox, которая принимает три аргумента: имя изображения, текст подписи и метку, используемую для перекрестных ссылок.

Он определяет ширину изображения и подписи и создает поля соответствующих размеров.

Вы можете, но не обязаны, передавать ему необязательный четвертый аргумент внутри [, а ]также, если вы хотите передать дополнительные аргументы команде \includegraphicsвнутри. Используя это, вы можете вручную настроить размер и другие свойства изображения, если это необходимо.

(При такой настройке изображения размером более 120 мм или около того выглядят не очень хорошо, поскольку для блоков недостаточно места, чтобы иметь такие же отступы, как у других блоков, поэтому иногда вам может понадобиться использовать эту настройку размера изображения. В других случаях он будет использовать естественный размер изображения и вычислять блок на его основе.)

\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}

Добавленный мной материал начинается с комментария % some lengths and a counter we'll need later.

Я перешел, \frontmatterпотому что в преамбуле это не имеет никакого смысла.

пример вывода для tcolorboxes

Связанный контент