Crea un estilo específico para los capítulos usando titlesec

Crea un estilo específico para los capítulos usando titlesec

Estoy escribiendo una plantilla para aprender un poco más sobre LaTeX y no estoy satisfecho con mi \chapter{}dominio. Intenté hacer un mini TOC con el número de capítulo como se muestra en la siguiente figura: ingrese la descripción de la imagen aquí

Sin embargo, quiero algunos cambios específicos para que este sea perfecto para mí.

  1. Primero, me siento muy incómodo con el diferente espaciado en los lados derecho e izquierdo, y no sé cómo solucionarlo; además, quiero que el espaciado en todos los lados sea el mismo, no como en la imagen de abajo: ingrese la descripción de la imagen aquí

  2. En segundo lugar, me gustaría mucho que el contenido dentro de la mini tabla de contenido se adaptara al tamaño del rectángulo que lo contiene, de modo que cuantas más secciones haya dentro, más pequeña será la fuente para que quepa en todas las secciones.

  3. En tercer lugar, recibo la advertencia Overfull \hbox (1.22324pt too wide) in paragraph at lines 15--15cuando escribo el comando \chapter{Entering the commands}y realmente no tengo idea de por qué.

Bueno, mi MWE es este:

Mi .clsarchivo:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{solutionclass}[2023/03/03 My Custom LaTeX Class for exercise solutions]

\LoadClass[a4paper, twoside, 11pt]{book}

% LANGUAGE AND ENCODING
\RequirePackage[portuguese, english]{babel}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}

% TEXT FORMATTING AND MANIPULATION
\RequirePackage{csquotes}
\RequirePackage{mathrsfs}
\RequirePackage{titlesec}
\RequirePackage{lipsum}

% FIGURES, TIKZ AND BOXES
\RequirePackage{graphicx}
\RequirePackage{float}
\RequirePackage{xcolor}
\RequirePackage{tikz}
\RequirePackage{tikz-3dplot}
\RequirePackage{pgfplots}
\RequirePackage[most]{tcolorbox}

% PAGE AND TEXT STYLES
\RequirePackage[colorlinks = true,
            urlcolor = LinkColor,
            anchorcolor = LinkColor,
            citecolor = LinkColor,
            filecolor = LinkColor,
            linkcolor = LinkColor,
            menucolor = LinkColor,
            linktocpage = true,
            bookmarks = true,
            pdfusetitle]{hyperref}
\RequirePackage[top = 2.5cm,
            bottom = 3.8cm,
            left = 2cm,
            right = 2cm,
            ]{geometry}
\RequirePackage{microtype}
\RequirePackage{titletoc}
\RequirePackage{multicol}
\RequirePackage{lmodern}
\RequirePackage{nameref}

\usetikzlibrary{%
    decorations.pathreplacing, 
    decorations.pathmorphing, 
    decorations.markings, 
    shapes.multipart, 
    shapes.geometric, 
    arrows.meta,
    tikzmark, 
    fadings, 
    arrows, 
    angles, 
    quotes, 
    calc,
    3d,
}
\pgfplotsset{compat=1.18}

% COLOR SETTINGS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\definecolor{myblack}{HTML}{101010} % PERSONAL BLACK
\definecolor{myorangeI}{HTML}{e93820} % PERSONAL ORANGE I
\definecolor{LinkColor}{HTML}{eb5a00} % PERSONAL ORANGE II

% CHAPTER SETTINGS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\chapterNumberAndMinitoc}{%
\begin{tikzpicture}
\node[%
    minimum height  = 3.2cm,
    text width      = 2.5cm,
    outer sep       = 0pt,   
    align           = center, 
    fill            = myblack,
    font            = \color{white}\fontsize{80}{90}\selectfont,
] (num) {\thechapter};

\node[%
    rotate  = 90,
    anchor  = south,
    font    = \color{black}\Large\normalfont
] at ([xshift=-3pt] num.west) {\textls[180]{\textsc{List N°}}};

\node[%
    minimum height  = 3.2cm,% Height of the box    
    minimum width   = 6.2cm,
    inner sep       = 2.5mm, % The border thickness
    align           = left, % Text aligning
    fill            = myblack, % Color background
] at ([xshift=-10.3cm] num.east) {%
    \color{white}
    \begin{minipage}{0.7552\textwidth} % Control the width of the box
        \begin{multicols}{2}
            \printcontents[sections]{}{1}{}{}
        \end{multicols}
    \end{minipage}
};
\end{tikzpicture}%
}

\titleformat{\chapter}[display]
{\normalfont\bfseries\color{myblack}}
{\filleft%
    \chapterNumberAndMinitoc}{1em}
{\titlerule[2.5pt]\vspace{3pt}\titlerule\vspace{4pt}\LARGE\textsc}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\patchcmd{\chapter}{%
\if@openright
    \cleardoublepage
    \else
    \clearpage
\fi
}{%
}{}{}
\makeatother


\let\oldsection\section                             
\renewcommand{\section}[1]{%                        
    \oldsection*{#1}                                
    \phantomsection                                
    \addcontentsline{toc}{section}{#1}              
}                                                 

Mi .texarchivo:

\documentclass[]{solutionclass}

\pagestyle{plain}

\begin{document}

\makeatletter
    \startcontents[sections]
    \phantomsection
    \chapter{Entering the commands} % Here I have the warning
\makeatother

\section{Unbreakable Form}

\section{Breakable Form}

\section{Using the references}

\section{Equations style}

\section{Additional Boxes}

\section{Additional Commands}

\end{document}

Comentarios adicionales:

Elimino el número de cada sección para mantener limpio el mini-TOC;

Si este código no funciona es posible que se me haya olvidado algún dato en el post, porque como el .clses muy grande no quise ponerlo todo para que no fuera difícil de entender, pero para mí este código funciona;

Estoy compilando con pdfLaTeX.

Respuesta1

Respuesta parcial

los diferentes espacios en los lados derecho e izquierdo,

\hbox demasiado lleno (1.22324pt demasiado ancho)

yo añadí

\titlecontents{section}
[0em]
{}
{}
{}
{\titlerule*[1pc]{.}\contentspage}

También agregué inner sepy outer seppara calcular el ancho disponible para el último nodo con el xfppaquete

\fpeval{\textwidth-2.5cm-20pt-5mm}pt
  • 2,5 cm el ancho del primer nodo.
  • 20 puntos la altura (girar 90) del segundo nodo
  • 5 mm 2 x la separación interior del tercer nodo

Se agregó el % detrás de la minipágina final.

EDITAR

Me gustaría mucho que el contenido dentro del mini índice se adapte al tamaño del rectángulo que lo contiene

Yo uso la fittingbiblioteca detcolorbox

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{solutionclass}[2023/03/03 My Custom LaTeX Class for exercise solutions]

\LoadClass[a4paper, twoside, 11pt]{book}

% LANGUAGE AND ENCODING
\RequirePackage[portuguese, english]{babel}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}

% TEXT FORMATTING AND MANIPULATION
\RequirePackage{csquotes}
\RequirePackage{mathrsfs}
\RequirePackage{titlesec}
\RequirePackage{lipsum}

% FIGURES, TIKZ AND BOXES
\RequirePackage{graphicx}
\RequirePackage{float}
\RequirePackage{xcolor}
\RequirePackage{tikz}
\RequirePackage{tikz-3dplot}
\RequirePackage{pgfplots}
\RequirePackage[most]{tcolorbox}

% PAGE AND TEXT STYLES
\RequirePackage[colorlinks = true,
            urlcolor = LinkColor,
            anchorcolor = LinkColor,
            citecolor = LinkColor,
            filecolor = LinkColor,
            linkcolor = LinkColor,
            menucolor = LinkColor,
            linktocpage = true,
            bookmarks = true,
            pdfusetitle]{hyperref}
\RequirePackage[top = 2.5cm,
            bottom = 3.8cm,
            left = 2cm,
            right = 2cm,
            ]{geometry}
\RequirePackage{microtype}
\RequirePackage{titletoc}
\RequirePackage{multicol}
\RequirePackage{lmodern}
\RequirePackage{nameref}
\RequirePackage{xfp}%<--- added

\usetikzlibrary{%
    decorations.pathreplacing, 
    decorations.pathmorphing, 
    decorations.markings, 
    shapes.multipart, 
    shapes.geometric, 
    arrows.meta,
    tikzmark, 
    fadings, 
    arrows, 
    angles, 
    quotes, 
    calc,
    3d,
}
\pgfplotsset{compat=1.18}

% COLOR SETTINGS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\definecolor{myblack}{HTML}{101010} % PERSONAL BLACK
\definecolor{myorangeI}{HTML}{e93820} % PERSONAL ORANGE I
\definecolor{LinkColor}{HTML}{eb5a00} % PERSONAL ORANGE II

% CHAPTER SETTINGS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\chapterNumberAndMinitoc}{%
\begin{tikzpicture}
\node[%
    minimum height  = 3.2cm,
    text width      = 2.5cm,
    outer sep       = 0pt,
    inner sep       = 0pt,%<--- added   
    align           = center, 
    fill            = myblack,
    font            = \color{white}\fontsize{80}{90}\selectfont,
] (num) {\thechapter};

\node[%
    minimum height  = 20pt,%<--- added
    outer sep       = 0pt,%<--- added
    inner sep       = 0pt,%<--- added  
    rotate  = 90,
    anchor  = south,
    font    = \color{black}\Large\normalfont
]
(listN)%<--- added
at 
(num.west)
{\textls[180]{\textsc{List N°}}};
\node[%
    inner sep       = 0pt, % The border thickness
    outer sep       = 0pt,%<--- added
    anchor          = east,
] at 
(listN.north) {%<--- added
    %\color{white}
    % \begin{minipage}{\fpeval{\textwidth-2.5cm-20pt-5mm}pt} % Control the width of the box
    %     %\setlength{\columnsep}{0pt}
    %     \begin{multicols}{2}
    %         \printcontents[sections]{}{1}{}{}
    %     \end{multicols}
    % \end{minipage}%<--- added DON't FORGET
    %%%%%%%%%%%%%% EDIT 
    \begin{tcolorbox}[
        width=\fpeval{\textwidth-2.5cm-20pt}pt,
        enhanced,
        boxrule=0pt,
        sharp corners,
        left=2.5mm,
        right=2.5mm,
        top=2.5mm,
        bottom=2.5mm,
        valign=center,
        colback=myblack,
        fit to height=3.2cm,
        fit fontsize macros
        ]
        \color{white}
        \begin{multicols}{2}
            \printcontents[sections]{}{1}{}{}
        \end{multicols}
\end{tcolorbox}
};
\end{tikzpicture}%
}

\titleformat{\chapter}[display]
{\normalfont\bfseries\color{myblack}}
{\filleft%
\chapterNumberAndMinitoc}{1em}
{\titlerule[2.5pt]\vspace{3pt}\titlerule\vspace{4pt}\LARGE\textsc}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\patchcmd{\chapter}{%
\if@openright
    \cleardoublepage
    \else
    \clearpage
\fi
}{%
}{}{}
\makeatother

\let\oldsection\section                             
\renewcommand{\section}[1]{%                        
    \oldsection*{#1}                                
    \phantomsection                                
    \addcontentsline{toc}{section}{#1}     
}

%%%%%%%%%%%  Added
\titlecontents{section}
[0em]
{\small}
{}
{}
{\titlerule*[1pc]{.}\contentspage}

ingrese la descripción de la imagen aquí

Respuesta2

Aquí está mi solución.

En el archivo .cls guardo el xcolorpaquete. No es necesario comotikzproporciona acceso a los colores, pero podemos usar la opción global como divpsnamesen la clase de documento para acceder a más nombres de colores.

He añadido marginparwidth = 1.25cmen las opciones delgeometríaPaquete (por lo que hay un pequeño margen).

He conservado su código para evitar una nueva página al comienzo de un nuevo capítulo ( \patchcmd{\chapter}{...}).

Mi código usa el TikBiblioteca Z calc, pero ya la cargó en su archivo de clase, por lo que no tengo que agregarla. Pero recuerda no quitarlo.

En el código que formatea el título del capítulo (ver \titleformat), lo agregué \fontfamily{cmr}para tener acceso a versalitas en negrita.

En el entorno de \titlespacing, he usado longitudes fijas, pero puedes usar longitudes frotadas en su lugar.

He puesto el títuloclase(atítulossecconcepto) para straightmantener el espacio vertical antes del bloque de capítulo, a menos que sea la parte superior de una página. Con la showframeopción delgeometríapaquete, puede ver en la tercera captura de pantalla que no hay espacio vertical cuando un capítulo comienza en la parte superior de la página. Tenga en cuenta que si no ha elegido permitir que el capítulo comience en el medio de una página, configurar el espacio vertical agregado antes 0ptno \titlespacinges suficiente. Queda un poco de espacio (verhttps://github.com/jbezos/titlesec/issues/53), y como el autor del paquete no corrige este "error", ya que es el mismo comportamiento en el kernel de LaTeX, aquí existe una solución alternativa:El paquete titlesec agrega espacio adicional encima de \chapter, a pesar de los comandos que indiquen lo contrario.

Entonces, si no desea que el capítulo comience en el medio de la página, después de eliminar el código \patchcmd{\chapter}{...}, debe configurar (en \titlespacing) elespacio vertical antesY 0ptagregar este pequeño código:

\makeatletter % the macro name contains @
\patchcmd{\ttl@mkchap@i}{\vspace*{\@tempskipa}}{}{}{}
\makeatother

En el resto del código, establecí algunas longitudes (80% de las \textwidthpara elminitocbloque, el 15% del \textwidthpara elnúmero de capítulobloque, elseparación interiordelminitocbloque, la separación de columnas.

Si el número de capítulo va más allá del 9, debe ajustar (reducir) el tamaño del número mostrado (en el segundo \nodeen el código del \chapterNumberAndMinitoccomando).

Luego configuro el formato de la tabla de contenido parcial.

Entonces, llegamos al \chapterNumberAndMinitoccódigo.

Tenemos 4 pasos: mostrar elminitocbloque a la izquierda, mostrando el fondo del número del capítulo a la derecha, con la misma altura delminitocbloque, muestra el número del capítulo en el centro y finalmente muestra el texto rotado en el centro del espacio entre los dos bloques de colores.

He eliminado tu código \renewcommand{\section}[1]{...}.

Tenga en cuenta que ha utilizado un color muy oscuro (llamado myblack) para elminitocbloque, el título del capítulo, el número del capítulo, las reglas del capítulo, pero no para el texto rotado. He mantenido el negro para el texto rotado.

Para demostrar el uso de esta clase de LaTeX en una situación real, he usado una gran cantidad de texto falso con ellabiospaquete (que ya ha cargado en su archivo de clase original). Puede ajustar algunos espacios para la TOC parcial si necesita mostrar números de página superiores a 99 (consulte en \titlecontents{p-section}y reemplácelo {}por {\contentsmargin{20pt}}en elcódigo antes, por lo que tiene espacio para un tercer dígito para el número de página).

El solutionclass.clsarchivo:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{solutionclass}[2023/03/15 My Custom LaTeX Class for exercise solutions]

\LoadClass[a4paper, twoside, 11pt]{book}

% LANGUAGE AND ENCODING
\RequirePackage[portuguese, english]{babel}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}

% TEXT FORMATTING AND MANIPULATION
\RequirePackage{csquotes}
\RequirePackage{mathrsfs}
\RequirePackage{titlesec}
\RequirePackage{lipsum}

% FIGURES, TIKZ AND BOXES
\RequirePackage{graphicx}
\RequirePackage{float}
\RequirePackage{xcolor}
\RequirePackage{tikz}
\RequirePackage{tikz-3dplot}
\RequirePackage{pgfplots}
\RequirePackage[most]{tcolorbox}

% PAGE AND TEXT STYLES
\RequirePackage[colorlinks = true,
            urlcolor = LinkColor,
            anchorcolor = LinkColor,
            citecolor = LinkColor,
            filecolor = LinkColor,
            linkcolor = LinkColor,
            menucolor = LinkColor,
            linktocpage = true,
            bookmarks = true,
            pdfusetitle]{hyperref}
\RequirePackage[top = 2.5cm,
            bottom = 3.8cm,
            left = 2cm,
            right = 2cm,
            marginparwidth = 1.25cm % <- added
            ]{geometry}
\RequirePackage{microtype}
\RequirePackage{titletoc}
\RequirePackage{multicol}
\RequirePackage{lmodern}
\RequirePackage{nameref}

\usetikzlibrary{%
    decorations.pathreplacing, 
    decorations.pathmorphing, 
    decorations.markings, 
    shapes.multipart, 
    shapes.geometric, 
    arrows.meta,
    tikzmark, 
    fadings, 
    arrows, 
    angles, 
    quotes, 
    calc,
    3d,
}
\pgfplotsset{compat=1.18}

% COLOR SETTINGS
%%%%%%%%%%%%%%%%%%%%
\definecolor{myblack}{HTML}{101010} % PERSONAL BLACK
\definecolor{myorangeI}{HTML}{e93820} % PERSONAL ORANGE I
\definecolor{LinkColor}{HTML}{eb5a00} % PERSONAL ORANGE II

% CHAPTER SETTINGS
%%%%%%%%%%%%%%%%%%%%

% Avoid new page at the beginning of a new chapter
\makeatletter
\patchcmd{\chapter}{%
\if@openright
    \cleardoublepage
    \else
    \clearpage
\fi
}{%
}{}{}
\makeatother

% formatting of the chapter title (number+text)
\titleformat{\chapter}% sectionning type to customize
    [display]% shape, here number and title text on separate lines
    {\normalfont\bfseries\color{myblack}\startcontents[sections]}%format; begins a partial toc named "sections" at each new chapter
    {\chapterNumberAndMinitoc}% formatting code of the section (here chapter) number. Instead only number, this code also displays a partial TOC (sections in the current chapter)
    {1em}% in "display" shape, the distance between the "number" and the "title", here he distance between the minitoc block and the rule above the chapter title
    {\titlerule[2.5pt]\vspace{3pt}\titlerule\vspace{4pt}\LARGE\fontfamily{cmr}\textsc}% code before the title text. Here for rules and the title format. Added \fontfamily{cmr} for the bold small caps

% Setting of the space before and after the title
\titlespacing{\chapter}% Place the chapter block almost at top of the page
    {0pt}% space added at left
    {20pt}% vertical space added before
    {20pt}% vertical space added after (space between chapter title and section title, for example)
    
\titleclass{\chapter}{straight} % so, if the chapter is at the beginning of a page, there is no vertical space before

% Further geometry settings
\columnsep=20pt % gap between the two columns in the multicols environment
\newlength{\minitocInnerSep}% inner sep in the minitoc node
\setlength{\minitocInnerSep}{10pt}
\newlength{\minitocWidth}% width of the minitoc block
\setlength{\minitocWidth}{0.8\textwidth}
\newlength{\chapterBlockWidth}% width of the block with the chapter number
\setlength{\chapterBlockWidth}{0.15\textwidth} % this value must be less than (1-0.8)\textwidth; here with 1-0.8-0.15=0.05, we have 0.05 for the width of the region of the rotated text. Never be less than 0.03.
\newlength{\minipageWidth}% width of the minipage in the minitoc
\setlength{\minipageWidth}{\dimexpr\minitocWidth-2\minitocInnerSep}%So the width of the minitoc block remains \minitocWidth

% formatting the section type (named p-section, see the prefix in \printcontents[sections] below) in the partial toc
\titlecontents{p-section}%
    [0pt]% left margin, i.e. space before the text, generally for the section number
    {}% code before (global formatting code).
    {}% section number formatting code
    {}% formatting code for sections without number
    {\titlerule*[6pt]{.}\contentspage}% filler (here, dotted line) formatting. Followed by the page number (aka \contentspage)

\newcommand{\chapterNumberAndMinitoc}{%
\begin{tikzpicture}
    % minitoc node
    \node[%
        minimum height = 3.2 cm,% Minimum height of the box
        inner sep = \minitocInnerSep,% The border thickness
        fill = myblack,% Color background
        outer sep = 0pt %Needed to avoid overfull hbox
        ] (minitoc) {%
            \color{white}
            \begin{minipage}{\minipageWidth}
                \begin{multicols}{2}
                    %displays the partial toc
                    \printcontents[sections]%
                    {p-}% prefix; so we can adjust the layout of the partial toc without changing the main (here name = p-section for modifying the sections in this partial toc)
                    {1}% display the partial toc from level 1 (0=chapter, 1=section)
                    [1]% ... to the level 1 (section)
                    {}% code for the partial toc        
                \end{multicols}
            \end{minipage}
            };
    %Draw of the chapter block
    \coordinate (chapterBlockNE) at ($(minitoc.north west)+(\textwidth,0)$);
    \coordinate (chapterBlockSW) at ($(minitoc.south west)+(\textwidth-\chapterBlockWidth,0)$);
    \fill[myblack] (chapterBlockNE) rectangle (chapterBlockSW);
    %Display the chapter number
    \node[%
        anchor = center,
        font = \color{white}\fontsize{80}{90}\selectfont %
        ] at ($(chapterBlockNE)!0.5!(chapterBlockSW)$) {\thechapter};
    %Display the rotated text
    \coordinate (rotatedTextC) at ($(minitoc.north east)!0.5!(chapterBlockSW)$);% center of the rotated text
    \node[%
        rotate = 90,
        anchor =  center,
        font = \color{black}\Large\normalfont
        ] at (rotatedTextC) {\textls[180]{\textsc{List} N\textsuperscript{o}}};
\end{tikzpicture}%
}                                               

el test.texarchivo:

\documentclass[showframe]{solutionclass}

\pagestyle{plain}

\begin{document}

\tableofcontents

\chapter{Entering the commands}

\section{Unbreakable Form}

\subsection{Subsection}

\section{Breakable Form}

\lipsum[1-70]

\section{Using the references}

\section{Equations style}

\lipsum[1-40]

\section{Additional Boxes}

\lipsum[1-34]

\section{Additional Commands}

\section{Equations style}

\section{Additional Boxes}

\lipsum[1-7]

\section{Additional Commands}

\section{Additional Boxes}

\section{Additional Commands}

\lipsum[1-6]

\chapter{New Chapter}

\section{New Section}

text

\newpage 

\chapter{Another New Chapter}

\section{A New Section}

\end{document}

Algunas capturas de pantalla del resultado (usando la showframeopción de clase de documento, proporcionada por elgeometríapaquete):

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

información relacionada