Ich schreibe eine Vorlage, um etwas mehr über LaTeX zu lernen, und bin mit meinem \chapter{}
Befehl nicht zufrieden. Ich habe versucht, ein Mini-Inhaltsverzeichnis mit der Kapitelnummer wie in der folgenden Abbildung zu erstellen:
Ich möchte jedoch einige spezifische Änderungen vornehmen, um dieses für mich perfekt zu machen.
Erstens fühle ich mich mit dem unterschiedlichen Abstand auf der rechten und linken Seite sehr unwohl und weiß nicht, wie ich das beheben kann. Darüber hinaus möchte ich, dass der Abstand auf allen Seiten gleich ist und nicht wie im Bild unten:
Zweitens möchte ich, dass sich der Inhalt des Miniinhaltsverzeichnisses an die Größe des Rechtecks anpasst, in dem es enthalten ist, sodass die Schrift umso kleiner wird, je mehr Abschnitte es enthält, damit alle Abschnitte hineinpassen.
Drittens erhalte ich die Warnung,
Overfull \hbox (1.22324pt too wide) in paragraph at lines 15--15
wenn ich den Befehl eingebe,\chapter{Entering the commands}
und ich habe wirklich keine Ahnung, warum.
Also, mein MWE ist folgendes:
Meine .cls
Datei:
\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}
}
Meine .tex
Datei:
\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}
Zusätzliche Kommentare:
Ich entferne die Nummer jedes Abschnitts, um das Mini-Inhaltsverzeichnis übersichtlich zu halten.
Wenn dieser Code nicht funktioniert, ist es möglich, dass ich einige Informationen im Beitrag vergessen habe, da der Beitrag
.cls
sehr umfangreich ist und ich nicht alles angeben wollte, damit es nicht schwer zu verstehen ist, aber für mich funktioniert dieser Code;
Ich kompiliere mit pdfLaTeX.
Antwort1
Teilantwort
die unterschiedlichen Abstände auf der rechten und linken Seite,
Überfüllte \hbox (1,22324pt zu breit)
Ich fügte hinzu
\titlecontents{section}
[0em]
{}
{}
{}
{\titlerule*[1pc]{.}\contentspage}
Ich habe auch inner sep
und hinzugefügt outer sep
, um die verfügbare Breite für den letzten Knoten mit dem xfp
Paket zu berechnen
\fpeval{\textwidth-2.5cm-20pt-5mm}pt
- 2,5 cm die Breite des ersten Knotens
- 20pt die Höhe (um 90 Grad gedreht) des 2. Knotens
- 5mm 2 x die innere Trennlinie des 3. Knotens
Das % hinter der letzten Miniseite wurde hinzugefügt.
BEARBEITEN
Ich möchte wirklich, dass sich der Inhalt im Mini-Inhaltsverzeichnis an die Größe des Rechtecks anpasst, in dem es sich befindet
Ich benutze die fitting
Bibliothek vontcolorbox
\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}
Antwort2
Hier ist meine Lösung.
In der .cls-Datei behalte ich das xcolor
Paket. Es wird nicht benötigt, datikzZugriff auf Farben ermöglichen, aber wir können auch globale Optionen wie divpsnames
in der Dokumentklasse verwenden, um auf weitere Farbnamen zuzugreifen.
Ich habe marginparwidth = 1.25cm
in den Optionen derGeometriePaket (es gibt also eine kleine Marge).
Ich habe Ihren Code zum Vermeiden einer neuen Seite am Anfang eines neuen Kapitels ( \patchcmd{\chapter}{...}
) beibehalten.
Mein Code verwendet das TikZ-Bibliothek calc
, aber Sie haben sie bereits in Ihre Klassendatei geladen, sodass ich sie nicht hinzufügen muss. Aber denken Sie daran, sie nicht zu entfernen.
Im Code, der die Kapitelüberschriften formatiert (siehe \titleformat
), habe ich hinzugefügt, \fontfamily{cmr}
um Zugriff auf fette Kapitälchen zu haben.
In der Einstellung \titlespacing
habe ich feste Längen verwendet, Sie können aber stattdessen auch geriebene Längen verwenden.
Ich habe den Titel festgelegtKlasse(ATitelsecKonzept), um straight
vertikalen Abstand vor dem Kapitelblock zu erhalten, es sei denn, es handelt sich um den oberen Rand einer Seite. Mit der showframe
Option desGeometriePaket, können Sie im dritten Screenshot sehen, dass es keinen vertikalen Abstand gibt, wenn ein Kapitel oben auf der Seite beginnt. Beachten Sie, dass, wenn Sie nicht ausgewählt haben, dass Kapitel in der Mitte einer Seite beginnen dürfen, es nicht ausreicht, den zuvor hinzugefügten vertikalen Abstand auf 0pt
in zu setzen \titlespacing
. Es bleibt ein wenig Platz übrig (siehehttps://github.com/jbezos/titlesec/issues/53) und da der Paketautor diesen „Fehler“ nicht korrigieren wird, da es sich um dasselbe Verhalten im LaTeX-Kernel handelt, gibt es hier einen Workaround:Das Paket „titlesec“ fügt zusätzlichen Platz über \chapter hinzu, trotz gegenteiliger Befehle.
Wenn Sie also nicht möchten, dass das Kapitel in der Mitte der Seite beginnt, \patchcmd{\chapter}{...}
müssen Sie nach dem Entfernen des Codes (in \titlespacing
) dievertikaler Raum vorum 0pt
diesen kleinen Code hinzuzufügen:
\makeatletter % the macro name contains @
\patchcmd{\ttl@mkchap@i}{\vspace*{\@tempskipa}}{}{}{}
\makeatother
Im restlichen Code habe ich einige Längen festgelegt (80% der \textwidth
für dieminitocBlock, 15% der \textwidth
für dieKapitelnummerBlock, derinnerer SepdesminitocBlock, die Spaltentrennung.
Wenn die Kapitelnummer über 9 hinausgeht, müssen Sie die Größe der angezeigten Nummer (in der Sekunde \node
im Code des \chapterNumberAndMinitoc
Befehls) anpassen (reduzieren).
Anschließend lege ich die Formatierung des partiellen Inhaltsverzeichnisses fest.
Dann kommen wir zum \chapterNumberAndMinitoc
Code.
Wir haben 4 Schritte: Anzeige derminitocBlock links, der den Hintergrund der Kapitelnummer rechts anzeigt, mit der gleichen Höhe wie derminitocBlock, zeigt die Kapitelnummer in der Mitte an und zeigt schließlich den gedrehten Text in der Mitte des Raums zwischen den beiden farbigen Blöcken an.
Ich habe Ihren Code entfernt \renewcommand{\section}[1]{...}
.
Beachten Sie, dass Sie eine sehr dunkle Farbe (mit dem Namen myblack
) für dieminitocBlock, der Kapiteltitel, die Kapitelnummer, die Kapitelregeln, aber nicht für den gedrehten Text. Ich habe das Schwarz für den gedrehten Text beibehalten.
Um die Verwendung dieser LaTeX-Klasse in einer realen Situation zu demonstrieren, habe ich viel falschen Text mit demLippenPaket (das Sie bereits in Ihre ursprüngliche Klassendatei geladen haben). Sie können einige Leerzeichen für das partielle Inhaltsverzeichnis anpassen, wenn Sie Seitenzahlen über 99 anzeigen müssen (siehe unter \titlecontents{p-section}
, und ersetzen Sie {}
durch {\contentsmargin{20pt}}
imCode vor, so dass Sie Platz für eine dritte Ziffer für die Seitenzahl haben).
Die solutionclass.cls
Datei:
\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}%
}
die test.tex
Datei:
\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}
Einige Screenshots der Ausgabe (unter Verwendung der showframe
Dokumentklassenoption, bereitgestellt durchGeometriePaket):