如何将图像放置在章节标题中(完美居中)

如何将图像放置在章节标题中(完美居中)

在开始之前,我了解:

\chapter{My Chapter Title\hfill\includegraphics{image}}

但这不是我所寻找的。

我想要以下结果:

完美居中

接下来是我尝试过的所有方法(以及它们各自的结果):

\chapter{Devise}\tabto{13cm}\includegraphics[height=2cm]{DEVISE_logo.png}

太低

\chapter[Devise]{Devise\hfill\parbox[c]{.5\textwidth}{\hfill\includegraphics[height=2cm]{DEVISE_logo.png}}}

太低

\begin{minipage}[c]{.5\linewidth}
    \chapter{Devise}
\end{minipage}
\begin{minipage}[c]{.5\linewidth}
    \hfill\includegraphics[height=2cm]{DEVISE_logo.png}
\end{minipage}

太高且偏移

\parbox[c]{.5\linewidth}{\chapter{Devise}}\parbox[c]{.5\linewidth}{\hfill\includegraphics[height=2cm]{DEVISE_logo.png}}

过低并偏移


附言:我发布的所有图片都具有相同的宽度,因此您会注意到最后两张图片的章节标题是偏移的。


只需补充 John Kormylo 找到的解决方案:

由于他发现章节块(编号+空格+标题)的高度为 2.3 厘米,因此要将图像放置在该块的中心线上,只需执行以下操作:

\savebox{\tempbox}{\raisebox{-((X-2.3)/2)cm}[0pt][0pt]{\includegraphics[height=Xcm]{example-image}}}

(将 X 替换为您所需的图像高度)

答案1

22pt 是通过反复试验得出的。它应该代表标题所用字体的高度加上 1/2 的间隙。出于某种原因,\chapter 不喜欢 \raisebox,因此使用了 \savebox。

\documentclass{book}
\usepackage{graphicx}
\usepackage{mwe}

\newsavebox{\tempbox}

\begin{document}
\savebox{\tempbox}{\raisebox{22pt}[\height]{\includegraphics[width=3cm]{example-image}}}
\chapter[My Chapter Title]{My Chapter Title\hfill\usebox{\tempbox}}% corrected

This space left blank.
\end{document}

章节标题

这是重叠文本的另一种形式。同样,2.3cm 是通过反复试验找到的。

\savebox{\tempbox}{\raisebox{0pt}[0pt][0pt]{\includegraphics[height=2.3cm]{example-image}}}

重叠

答案2

这是一个稍微复杂一点的解决方案:将图片以及可能的选项作为 的尾随可选参数给出\chapter

可以使用标准\chapter语法并定义\chapterfigure需要放在之前的命令\chapter

\documentclass[a4paper]{book}

\usepackage{xparse,graphicx,xpatch}
\let\latexchapter\chapter

\ExplSyntaxOn

\RenewDocumentCommand{\chapter}{somo}
 {
  \bool_gset_false:N \g_matthieu_chapter_figure_bool
  \IfBooleanTF{#1}
   {\latexchapter*{#3}}
   {
    \IfNoValueTF{#4}
     {
      \IfNoValueTF{#2}
       {\latexchapter{#3}}
       {\latexchapter[#2]{#3}}
     }
     {
      \bool_gset_true:N \g_matthieu_chapter_figure_bool
      \placefigure{#4}
      \IfNoValueTF{#2}
       {\latexchapter{#3}}
       {\latexchapter[#2]{#3}}
     }
   }
 }

\NewDocumentCommand{\placefigure}{m}
 {
  \keys_set:nn { matthieu/placefigure } { #1 }
  \matthieu_placefigure:V \l_matthieu_placefigure_options_tl
 }

\keys_define:nn { matthieu/placefigure }
 {
  options .tl_set:N  = \l_matthieu_placefigure_options_tl,
  file    .tl_set:N  = \l_matthieu_placefigure_file_tl,
  file    .initial:n = {},
 }

\box_new:N \l_matthieu_figure_box
\dim_new:N \l_matthieu_halfheight_dim
\bool_new:N \g_matthieu_chapter_figure_bool

\cs_new_protected:Npn \matthieu_placefigure:n #1
 {
  \hbox_set:Nn \l_matthieu_figure_box
   {
    \includegraphics[#1]{ \l_matthieu_placefigure_file_tl }
   }
  \hbox_set_to_wd:Nnn \l_matthieu_figure_box { \textwidth }
   {
    \hfil
    \box_move_down:nn { \box_ht:N \l_matthieu_figure_box / 2 }
     { \box_use:N \l_matthieu_figure_box }
   }
  \box_set_ht:Nn \l_matthieu_figure_box { 0pt }
  \box_set_dp:Nn \l_matthieu_figure_box { 0pt }
 }

\cs_generate_variant:Nn \matthieu_placefigure:n { V }

\makeatletter
\xpatchcmd{\@makechapterhead}
 { \vskip 20\p@ }
 {
  \vskip 10\p@ \nointerlineskip
  \bool_if:NT \g_matthieu_chapter_figure_bool { \box_use:N \l_matthieu_figure_box }
  \nointerlineskip
  \vskip 10\p@
 }
 {}{}
\makeatother

\ExplSyntaxOff

\begin{document}

\let\cleardoublepage\relax % just to show a few chapters

\chapter{My chapter title}[
  file=example-image,
  options={width=3cm,height=2cm}
]


\chapter{My chapter title}[
  file=example-image,
  options={width=3cm,height=30pt}
]

\chapter{My chapter title}[
  file=example-image,
  options={width=3cm,height=10pt}
]

\end{document}

在此处输入图片描述

相关内容