セクションやサブセクションの右端に画像を挿入したい

セクションやサブセクションの右端に画像を挿入したい

- Yuki Musashi の投稿
返信数: 8
美文書の第6版のsectionタイトルの右にある六角形状のアイコンのように小さい画像を挿入したいです。

今、jsbookパッケージで本を作成していますが、小節(サブセクション)毎に右側に画像を挿入するために、
・includegraphicsで画像を挿入
・flushrightで右寄せ
・vspaceでsubsectionタイトルと同じ高さに調節
・これを全subsectionにコピペ
をすればいいのかなぁと考えているのですが、明らかに面倒くさそうなので、楽な方法をご存知の方が居ればご教授願いたいです。

Win7、TeX Live2013、TeXworksです。
Yuki Musashi への返信

Re: セクションやサブセクションの右端に画像を挿入したい

- みなも の投稿
きちんとするなら,\subsection の定義を解析して,
書き換える(プリアンブルに \subsection の新しい定義を
書き込む)べきでしょうが,「なんちゃって改造」でよければ
こんな感じでしょうか。

\let\oldsubsection=\subsection
\def\subsection#1{%
\oldsubsection[#1]{#1\includegraphics{fig.eps}}}

\subsection の本来の定義を \oldsubsection にコピーし
それを使って \subsection の定義を書き換えてます。

fig.eps の部分が挿入したい画像です。

きっちり書き換えたいのであれば,
jsbook の \subsection の定義を解析して下さい。
(\@startsection を使って定義されてますが,
これだと改造しにくいので,
さらに \@startsection ==> \@sect の定義も解析する感じ
で,慣れてないと結構大変かもですが。)
みなも への返信

Re: セクションやサブセクションの右端に画像を挿入したい

- Yuki Musashi の投稿
とりあえず、

\let\oldsubsection=\subsection
\def\subsection#1{\oldsubsection[#1]{#1\dotfill\vspace{-18pt}\flushright\includegraphics[height=12pt]{./gazo.eps}}}
をプリアンブルに書いて

\chapter{章の始まりチャプター}
\section{節セクション}
\subsection{小節サブセクション}
\TeX テフはテフ。\LaTeX ラテフフフ、\LaTeXe ラテフフフフフフ、ツーーイー。
\subsection{小節小節サブセクション}
じゅげむ、\textbf{\textgt{\large じゅげむ、ごこうの}}すりきれ、かいじゃりすいぎょの。
\subsection{小節小節小節サブセクション}
すぎょうまつ、ふうらいまつ、うんらいまつ、くーーーねるところに、すむところ。やぶらこうじのぶらこうじ。
\section{節節セクション}
\subsection{小節小節小節サブセクション}
ぱいぽぱいぽぱいぽのしゅーーーーりんがん、ぐりーりんがんに。ぐーりんだい。

としてみました。
添付ファイル[section.PNG]を見れば分かると思いますが、gazo.epsの垂直位置がずれてしまいます。(完成形は\dotfill入れるつもり無いのですが、subsectionとの位置関係を分かりやすくするために入れました)

1.1と1.1.1の間に文字を入れたとき、1.1.2や1.1.3と同じ垂直位置になったので、subsectionの直前に文章が有るか無いかでgazo.epsの垂直位置が変わってしまうのかなぁ…と思っています。
jsbook.clsも読んでみます。
添付 section.PNG
Yuki Musashi への返信

Re: セクションやサブセクションの右端に画像を挿入したい

- でび まる の投稿
でびまるといいます。詳しい方が沢山いそうですが返信ないようなので。
\def\subsection#1{\oldsubsection[#1]{#1\dotfill\raisebox{-5pt}{\includegraphics[height=12pt]{./gazo.eps}}}}
のようにしたら垂直方向の位置は良さそうに思います。
もちろん \raisebox{-5pt} などは適当に修正してください。
何となくですが \vspace{-18pt} は周辺の影響がありそうに思います。また \flushright もここには違和感ある気がするし問題もありそうなので削除しました。ご希望とは違うかも分りませんが参考にでもなればと思います。



でび まる への返信

Re: セクションやサブセクションの右端に画像を挿入したい

- 北見 けん の投稿
でび まるさんの仰る通り、\vspace や \flushright は垂直リストを操作するので、
ここではうまくないですね。

水平リスト中で垂直方向の位置合わせをするには、\vspace ではなくて
\raise や \lower(LaTeXなら \raisebox)を使うか、
\vbox,\vsenter,\vtop を使い分ける(LaTeXなら \parbox の配置オプションを使う)かでしょう。

水平リスト中で左右に離して配置するには、\flushright を入れ子にして使うのでなく、
間に \hfil などをはさみます。

> jsbook.clsも読んでみます。
読むとしたら、クラスファイルよりも LaTeX 本体(latex.ltx)の \vspace の定義などがよさそうです。
Yuki Musashi への返信

Re: セクションやサブセクションの右端に画像を挿入したい

- Yuki Musashi の投稿
みなさまありがとうございます。結果的には望んでいた物ができました。

\let\oldsection=\section
\def\section#1{\oldsection[#1]{#1\hrulefill\includegraphics[clip,height=12pt]{./gazo.eps}}}

としてみて、いい感じにはなったのですが、\hrulefillの罫線が邪魔だったので、
http://www.biwako.shiga-u.ac.jp/sensei/kumazawa/tex/070.html
の.texファイルを参考に\myhrulefillで罫線の太さを0ptにすることで、望みを実現しました。最終的にプリアンブルに書いたのは、

\newcommand{\myhrulefill}{\leavevmode\leaders\hrule depth-3.1pt height 0pt\hfill\kern0pt}
\let\oldsection=\section
\def\section#1{\oldsection[#1]{#1\myhrulefill\includegraphics[clip,height=12pt]{./gazo.eps}}}

でした。それと、\raisebox{}でもきれいに垂直移動ができましたが、今回は\raisebox{0pt}で済んだので結果的には記述しませんでした。


※subsectionに画像挿入の質問でしたがsectionに変えたり、subsectionが\centeringになってるのは、途中でデザイン変更したくなったためで、今回の質問とは関係無いです。
添付 section.PNG
Yuki Musashi への返信

Re: セクションやサブセクションの右端に画像を挿入したい

- Yuki Musashi の投稿
あ、すいません、でびまるさんの返信を読んですぐにTeX弄ってたので北見さんの\hfillのアドバイスを見逃してしまいました。。。

\myhrulefillなど使わないで、
\let\oldsection=\section
\def\section#1{\oldsection[#1]{#1\hfill\includegraphics[clip,height=12pt]{./gazo.eps}}}
で同様の結果が得られました。

スルーするような真似をしてすいませんでした。
ありがとうございました。