使用 TikZ 通过 etoolbox 修改图片列表

使用 TikZ 通过 etoolbox 修改图片列表

我已经成功使用 TikZ 修改了 TeX 文档的目录,但不太清楚如何对图表列表、表格列表、致谢等实现相同的效果。我的(简化)样式文件如下所示:

% Style file to get green boxes in TOC.

\usepackage{tikz}
\usepackage{xcolor}
\usepackage{titletoc}
\usepackage[titletoc]{appendix}
\usepackage{etoolbox}
\usepackage{lmodern}

% define color
\definecolor{uvmgreen}{rgb}{0,0.35,0.23}

% ToC title with color box.
\patchcmd{\tableofcontents}{\contentsname}{
\vspace*{-70pt}%
\begin{tikzpicture}[remember picture, overlay]%
\pgftext[right,x=12cm,y=0.2cm]{\color{uvmgreen}\Huge\bfseries \contentsname};%
\draw[fill=uvmgreen,draw=uvmgreen] (13.5,-.75) rectangle (10,1);%
\clip (15.5,-.75) rectangle (10,1);
\pgftext[right,x=12cm,y=0.2cm]{\color{white}\Huge\bfseries \contentsname};%
\end{tikzpicture}}{}{}

示例报告如下:

\documentclass{report}

% import style file
\usepackage{greenBoxTOC}
\usepackage[pdftex]{graphicx}

\begin{document}

\tableofcontents
\newpage

\listoffigures
\newpage

\chapter{Quantum Harmonic Oscillator}
\section{test section}

\begin{figure}
\includegraphics[scale=1.0]{image.png}
\caption{sample caption} \label{fig: first figure}
\end{figure}

\section{test section }
\subsection{test subsection}
\section{test section}
\subsection{test subsection}
\subsection{A test subsection with a long title spanning more than one line in the table of contents}
\section{test section}


\chapter{Is it a Riemann Integral?} 
\section{test section}
\subsection{test subsection}
\section{test section with a long title spanning more than one line in the table of contents}
\subsection{test subsection}

\end{document}

我非常希望能够添加一个\listoffigures使用相同绿色框的样式,这些绿色框显示在顶部,上面写着“图片列表”。我(不成功)尝试将以下内容添加到样式文件中:

\patchcmd{\listoffigures}{\figurename}{
\vspace*{-70pt}%
\begin{tikzpicture}[remember picture, overlay]%
\pgftext[right,x=12cm,y=0.2cm]{\color{uvmgreen}\Huge\bfseries \figurename};%
\draw[fill=uvmgreen,draw=uvmgreen] (15.5,-.75) rectangle (10,1);%
\clip (15.5,-.75) rectangle (10,1);
\pgftext[right,x=12cm,y=0.2cm]{\color{white}\Huge\bfseries \figurename};%
\end{tikzpicture}}{}{}

但当我添加这个时,似乎什么都没有发生。任何建议都将不胜感激。提前致谢!

答案1

\listoffigures宏不包含对 的引用,\figurename而是对 的引用\listfigurename。而\listtablename对于\listoftables

或宏中分别有更多对\contentsname和的引用。这些用于启用标题时的标记。这些不应更改。\list*name\tableofcontents\listof*s

您也可以直接更改\contentsname\listof*,但是我建议不要这样做,因为它们可能会在其他地方使用(例如在标题中),这可能会破坏所有内容。

我还建议引入一个宏,比如说\tikzHeader生成绿色框来将内容与 TeXnics 分开。我还删除了该remember picture键,因为我看不出您想在图片中引用什么内容(反正也没有什么可引用的)。

\newcommand*\tikzHeader[1]{%
\begin{tikzpicture}[overlay]
  \pgftext[right,x=12cm,y=0.2cm]{\color{uvmgreen}\Huge\bfseries\htStrut\smash{#1}};
  \draw[fill=uvmgreen,draw=uvmgreen] (13.5cm,-.75cm) rectangle (10cm,1cm);
  \clip (15.5cm,-.75cm) rectangle (10cm,1cm);
  \pgftext[right,x=12cm,y=0.2cm]{\color{white}\Huge\bfseries\htStrut\smash{#1}};
\end{tikzpicture}}

我添加了一个\htStrut定义为的宏

\newcommand*\htStrut{\rule{0pt}{.7\baselineskip}}

\smash实际文本(这意味着它没有垂直尺寸\pgftext)。(g否则,“图”中的 会使垂直位置偏离。)如果您已amsmath加载,则只需使用\smash[b]{#1}并放下即可\htStrut

相关内容