
是否可以建立一個例程 - 類似於 \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
答案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
因為序言中沒有任何意義。