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:
Sin embargo, quiero algunos cambios específicos para que este sea perfecto para mí.
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:
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.
En tercer lugar, recibo la advertencia
Overfull \hbox (1.22324pt too wide) in paragraph at lines 15--15
cuando escribo el comando\chapter{Entering the commands}
y realmente no tengo idea de por qué.
Bueno, mi MWE es este:
Mi .cls
archivo:
\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 .tex
archivo:
\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
.cls
es 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 sep
y outer sep
para calcular el ancho disponible para el último nodo con el xfp
paquete
\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 fitting
biblioteca 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}
Respuesta2
Aquí está mi solución.
En el archivo .cls guardo el xcolor
paquete. No es necesario comotikzproporciona acceso a los colores, pero podemos usar la opción global como divpsnames
en la clase de documento para acceder a más nombres de colores.
He añadido marginparwidth = 1.25cm
en 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 straight
mantener el espacio vertical antes del bloque de capítulo, a menos que sea la parte superior de una página. Con la showframe
opció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 0pt
no \titlespacing
es 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 0pt
agregar 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 \textwidth
para elminitocbloque, el 15% del \textwidth
para 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 \node
en el código del \chapterNumberAndMinitoc
comando).
Luego configuro el formato de la tabla de contenido parcial.
Entonces, llegamos al \chapterNumberAndMinitoc
có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.cls
archivo:
\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.tex
archivo:
\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 showframe
opción de clase de documento, proporcionada por elgeometríapaquete):