Créer un environnement de «schéma» simple et une «liste de schémas»

Nov 22 2020

J'ai la majorité de ma thèse écrite et mise en page. Actuellement, j'ai une liste de figures et une liste de tableaux.

Cependant, ma commission me dit maintenant que je dois aussi avoir une liste de régimes. En chimie, un schéma est un environnement qui contient (des images de) structures et réactions chimiques.

Malheureusement, j'ai déjà codé mes structures chimiques sous forme de chiffres. Il existe quelques packages, tels que chemstyleet chemscheme, qui semblent fournir leurs propres constructions de schéma. Cependant, je préférerais ne pas les utiliser car certains de ces packages définissent leurs propres valeurs par défaut pour des choses comme les formules chimiques. (Par exemple, je vois que le chemstylepackage définit \ie, mais j'ai déjà ma propre définition \iedans ma thèse.) J'utilise déjà les packages chemformulaet chemmacros.

Est-il possible de créer plus simplement mon propre environnement Scheme? La seule différence dont j'ai besoin est que les régimes doivent être légendés comme «Schéma» et répertoriés dans une liste de schémas. En d'autres termes, la seule différence entre un chiffre et un schéma réside dans la comptabilité.

Voici mon MWE, avec plusieurs des packages cruciaux que j'utilise. Une complication possible est que j'utilise le subcaptionpackage pour créer des sous-figures. En général, je n'ai qu'une seule image par figure / schéma, mais je crée des sous-références à \phantomsubcaptionpartir du subcaptionpackage. En outre, j'utilise le tocloftpackage pour ajuster les espacements dans les listes de figures et de tableaux, ce qui pourrait potentiellement compliquer davantage les choses.

Enfin, ce serait bien si je pouvais utiliser le nouvel environnement "schéma" avec le cleverefpackage, car j'utilise \crefbeaucoup la commande de ce package pour faire référence à des figures, des tableaux, etc.

\documentclass[oneside,11pt]{book}

\usepackage[semibold,tt=false]{libertine}
\usepackage{libertinust1math}
\usepackage[font={sf,small},labelsep=quad,labelfont=sc]{caption}
\usepackage[subrefformat=parens]{subcaption}
\usepackage[
  expansion = false ,
  tracking = smallcaps ,
  letterspace = 40 ,
]{microtype}
\usepackage{booktabs}
\usepackage{acro}
\acsetup{
  barriers/use, barriers/reset,
  use-id-as-short,
}
\newcommand{\ie}{i.e.}
\newcommand{\eg}{e.g.}
\newcommand{\cf}{cf.}
\newcommand{\avg}[1]{\overline{#1}}
\usepackage{mdframed}
\usepackage[capitalize]{cleveref}
\usepackage{chemformula}
\setchemformula{charge-hshift=.5pt}
\usepackage{chemmacros}
\usepackage{graphicx}
\usepackage{enumitem}
\usepackage{calc}
\usepackage{tabto}
\usepackage[titles]{tocloft}
\setlength{\cftfignumwidth}{2.9em}
\setlength{\cfttabnumwidth}{2.9em}

\begin{document}

\addcontentsline{toc}{chapter}{\listfigurename}
\listoffigures

% \phantomsection %% Remove if using hyperref
\addcontentsline{toc}{chapter}{\listtablename}
\listoftables

\chapter{First chapter}
Text in the first chapter.
Refer to \cref{fig:firstfig} using cleveref package.
Refer to \cref{tbl:firsttbl}.
Refer to \cref{fig:multi}, \cref{fig:multi:a}, and \cref{fig:multi:b}.
Refer to eventual scheme, \cref{scm:eventualscheme}.
Refer to eventual multi-part scheme, \cref{scm:eventualmultischeme}.
% Example figure
\begin{figure}[!h]
  \centering
  \includegraphics[width=0.02\textwidth]{example-image}
  \caption{Caption of figure in first chapter.}\label{fig:firstfig}
\end{figure}

% Example table 
\begin{table}[!h]
  \centering
  \begin{tabular}{ll}
    \toprule
    A & B\\
    \bottomrule
  \end{tabular}
  \caption{Caption of table in first chapter.}\label{tbl:firsttbl}
\end{table}

% MULTIPART FIGURE 
\begin{figure}[!h]
  \centering
  \begin{subfigure}{\textwidth}
    \centering
    \includegraphics[width=0.02\textwidth]{example-image}
    \phantomsubcaption\label{fig:multi:a}
  \end{subfigure}
  \begin{subfigure}{0pt}
    \phantomsubcaption\label{fig:multi:b}
  \end{subfigure}
  \caption{Caption of figure referring to parts \subref{fig:multi:a} and \subref{fig:multi:b} with subref command.}\label{fig:multi}
\end{figure}

% I NEED TO CHANGE THE FOLLOWING FIGURE TO A SCHEME (SINGLE-PART SCHEME)
\begin{figure}[!h]
  \centering
  \includegraphics[width=0.02\textwidth]{example-image-a}
  \caption{Caption of eventual scheme.}\label{scm:eventualscheme}
\end{figure}

% I NEED TO CHANGE THE FOLLOWING FIGURE TO A SCHEME (MULTI-PART SCHEME, BUT ONLY WITH ONE IMAGE)
\begin{figure}[!h]
  \centering
  \begin{subfigure}{\textwidth}
    \centering
    \includegraphics[width=0.02\textwidth]{example-image-b}
    \phantomsubcaption\label{scm:eventualmultischeme:a}
  \end{subfigure}
  \begin{subfigure}{0pt}
    \phantomsubcaption\label{scm:eventualmultischeme:a}
  \end{subfigure}
  \caption{Caption of eventual scheme referring to parts \subref{fig:multi:a} and \subref{fig:multi:b} with subref command.}\label{scm:eventualmultischeme}
\end{figure}

\chapter{Second chapter}
Text in the second chapter.
Refer to \cref{fig:secondfig}.
% Another example figure
\begin{figure}[!h]
  \centering
  \includegraphics[width=0.02\textwidth]{example-image}
  \caption{Caption of figure in second chapter.}\label{fig:secondfig}
\end{figure}
\end{document}

Réponses

3 leandriis Nov 22 2020 at 16:36

Voici comment combiner chemmacros' schememodule avec subcaptionet cleveref. J'ai également changé le style de référence pour correspondre aux sous-figures.

Malheureusement, \listofschemessemble actuellement incompatible avec la bookclasse (voir aussi: rapport de bogue correspondant ). J'ai donc utilisé reportpour le MWE suivant:

  • Liste des schémas:

  • Références aux schémas et sous-schémas:

  • Légendes des schémas:

\documentclass[oneside,11pt]{report}

\usepackage[semibold,tt=false]{libertine}
\usepackage{libertinust1math}
\usepackage[font={sf,small},labelsep=quad,labelfont=sc]{caption}
\usepackage[subrefformat=parens]{subcaption}
\usepackage[
  expansion = false ,
  tracking = smallcaps ,
  letterspace = 40 ,
]{microtype}
\usepackage{booktabs}
\usepackage{acro}
\acsetup{
  barriers/use, barriers/reset,
  use-id-as-short,
}
\newcommand{\ie}{i.e.}
\newcommand{\eg}{e.g.}
\newcommand{\cf}{cf.}
\newcommand{\avg}[1]{\overline{#1}}
\usepackage{mdframed}

\usepackage{chemformula}
\setchemformula{charge-hshift=.5pt}
\usepackage{chemmacros}
\chemsetup{modules=scheme}

\AtEndPreamble{\DeclareCaptionSubType*{scheme}\counterwithin{scheme}{chapter}\renewcommand\thesubscheme{\thescheme\alph{subscheme}}}


\usepackage{graphicx}
\usepackage{enumitem}
\usepackage{calc}
\usepackage{tabto}
\usepackage[titles]{tocloft}
\setlength{\cftfignumwidth}{2.9em}
\setlength{\cfttabnumwidth}{2.9em}

\usepackage{xpatch}
\makeatletter
\xapptocmd{\@chapter}{\addtocontents{los}{\protect\addvspace{10\p@}}}{}{}
\makeatother

\usepackage[capitalize]{cleveref}
\crefformat{subscheme}{\schemename~#2#1#3}


\begin{document}

\addcontentsline{toc}{chapter}{\listfigurename}
\listoffigures

% \phantomsection %% Remove if using hyperref
\addcontentsline{toc}{chapter}{\listtablename}
\listoftables

\addcontentsline{toc}{chapter}{\listschemename}
\listofschemes

\chapter{First chapter}
Text in the first chapter.

Refer to \cref{fig:firstfig} using cleveref package.

Refer to \cref{tbl:firsttbl}.

Refer to \cref{fig:multi}, \cref{fig:multi:a}, and \cref{fig:multi:b}.

Refer to eventual scheme, \cref{scm:eventualscheme}.

Refer to eventual multi-part scheme, \cref{scm:eventualmultischeme}, \cref{scm:eventualmultischeme:a}, and \cref{scm:eventualmultischeme:b}.


\begin{figure}[!h]
  \caption{Caption of figure in first chapter.}\label{fig:firstfig}
\end{figure}


\begin{table}[!h]
  \caption{Caption of table in first chapter.}\label{tbl:firsttbl}
\end{table}

 
\begin{figure}[!h]
  \begin{subfigure}{\textwidth}
    \phantomsubcaption\label{fig:multi:a}
  \end{subfigure}
  \begin{subfigure}{0pt}
    \phantomsubcaption\label{fig:multi:b}
  \end{subfigure}
  \caption{Caption of figure referring to parts \subref{fig:multi:a} and \subref{fig:multi:b} with subref command.}\label{fig:multi}
\end{figure}


\begin{scheme}[!h]
  \caption{Caption of scheme.}\label{scm:eventualscheme}
\end{scheme}

\begin{scheme}[!h]

  \begin{subfigure}{\textwidth}
    \phantomsubcaption\label{scm:eventualmultischeme:a}
  \end{subfigure}
  \begin{subfigure}{0pt}
    \phantomsubcaption\label{scm:eventualmultischeme:b}
  \end{subfigure}
  \caption{Caption of scheme referring to parts \subref{fig:multi:a} and \subref{fig:multi:b} with subref command.}\label{scm:eventualmultischeme}
\end{scheme}

\chapter{Second chapter}
Text in the second chapter.
Refer to \cref{fig:secondfig}.

\begin{figure}[!h]
  \caption{Caption of figure in second chapter.}\label{fig:secondfig}
\end{figure}

\begin{scheme}[!h]
  \caption{Caption of scheme.}\label{scm:eventualscheme2}
\end{scheme}

\end{document}
3 egreg Nov 22 2020 at 18:34

Chargez le newfloatpackage et le schememodule pour chemmacros.

Il vous suffit de configurer un subschemeenvironnement pour subcaption, ce qui doit être fait au début du document.

J'ai chargé tocbibindpour l'ajout \listoffigureset \listoftablesà la table des matières. Votre méthode manuelle est incorrecte: vous devriez au moins l'avoir \cleardoublepageavant \addcontentsline.

\documentclass[oneside,11pt]{book}

\usepackage[semibold,tt=false]{libertine}
\usepackage{libertinust1math}
\usepackage[font={sf,small},labelsep=quad,labelfont=sc]{caption}
\usepackage[subrefformat=parens]{subcaption}
\usepackage{newfloat}
\usepackage[
  expansion = false ,
  tracking = smallcaps ,
  letterspace = 40 ,
]{microtype}
\usepackage{booktabs}
\usepackage{acro}
\usepackage{mdframed}
\usepackage{chemformula}
\usepackage{chemmacros}
\usepackage{graphicx}
\usepackage{enumitem}
\usepackage{calc}
\usepackage{tabto}
\usepackage[titles]{tocloft}
\usepackage[nottoc]{tocbibind}
\usepackage[capitalize]{cleveref} % should be last

% acro options
\acsetup{
  barriers/use, barriers/reset,
  use-id-as-short,
}
% chemmacros options
\usechemmodule{scheme}
% chemformula options
\setchemformula{charge-hshift=.5pt}
% tocloft options
\setlength{\cftfignumwidth}{2.9em}
\setlength{\cfttabnumwidth}{2.9em}
% caption options
\AtBeginDocument{\DeclareCaptionSubType*[alph]{scheme}}

% personal commands
\newcommand{\ie}{i.e.}
\newcommand{\eg}{e.g.}
\newcommand{\cf}{cf.}
\newcommand{\avg}[1]{\overline{#1}}

\begin{document}

\tableofcontents
\listoffigures
\listoftables
\listofschemes

\chapter{First chapter}

Text in the first chapter.
Refer to \cref{fig:firstfig} using cleveref package.
Refer to \cref{tbl:firsttbl}.
Refer to \cref{fig:multi}, \cref{fig:multi:a}, and \cref{fig:multi:b}.
Refer to eventual scheme, \cref{scm:eventualscheme}.
Refer to eventual multi-part scheme, \cref{scm:eventualmultischeme}.

% Example figure
\begin{figure}[!h]
  \centering
  \includegraphics[width=0.02\textwidth]{example-image}
  \caption{Caption of figure in first chapter.}\label{fig:firstfig}
\end{figure}

% Example table 
\begin{table}[!h]
  \centering
  \begin{tabular}{ll}
    \toprule
    A & B\\
    \bottomrule
  \end{tabular}
  \caption{Caption of table in first chapter.}\label{tbl:firsttbl}
\end{table}

% MULTIPART FIGURE 
\begin{figure}[!h]
  \centering
  \begin{subfigure}{0.45\textwidth}
    \centering
    \includegraphics[width=0.02\textwidth]{example-image}
    \phantomsubcaption\label{fig:multi:a}
  \end{subfigure}
  \begin{subfigure}{0.45\textwidth}
    \includegraphics[width=0.02\textwidth]{example-image}
    \phantomsubcaption\label{fig:multi:b}
  \end{subfigure}
  \caption{Caption of figure referring to parts \subref{fig:multi:a} and \subref{fig:multi:b} with subref command.}\label{fig:multi}
\end{figure}

\begin{scheme}[!h]
  \centering
  \includegraphics[width=0.02\textwidth]{example-image-a}
  \caption{Caption of eventual scheme.}\label{scm:eventualscheme}
\end{scheme}

\begin{scheme}[!h]
  \centering
  \begin{subscheme}{0.45\textwidth}
    \centering
    \includegraphics[width=0.02\textwidth]{example-image-a}
    \phantomsubcaption\label{scm:eventualmultischeme:a}
  \end{subscheme}
  \begin{subscheme}{0.45\textwidth}
    \includegraphics[width=0.02\textwidth]{example-image-b}
    \phantomsubcaption\label{scm:eventualmultischeme:b}
  \end{subscheme}
  \caption{Caption of eventual scheme referring to parts \subref{fig:multi:a} and \subref{fig:multi:b} with subref command.}\label{scm:eventualmultischeme}
\end{scheme}

\chapter{Second chapter}

Text in the second chapter.
Refer to \cref{fig:secondfig}.

% Another example figure
\begin{figure}[!h]
  \centering
  \includegraphics[width=0.02\textwidth]{example-image}
  \caption{Caption of figure in second chapter.}\label{fig:secondfig}
\end{figure}

\end{document}
2 gernot Nov 22 2020 at 02:50

Comme @leandriis l'a noté dans les commentaires, le chemmacrospackage fait apparemment déjà ce que vous voulez.

Sinon, il suffit d'ajouter les lignes

\usepackage{newfloat}
\DeclareFloatingEnvironment[fileext=los,placement={!ht},name=Scheme]{myscheme}
\captionsetup[myscheme]{labelfont=bf}
\crefname{myscheme}{scheme}{schemes}

à votre préambule et peut ensuite utiliser un nouveau type de flotteur myschemesimilaire à figures. La liste des schémas est produite avec \listofmyschemes.