初心者必見!LaTeX \hrulefill&\dotfillの基本から応用まで徹底解説
\hrulefill
と\dotfill
は、LaTeXで水平方向に指定された領域を埋めるために使用されるコマンドです。これらは特に、目次やフォーム、レイアウト調整などでよく使われます。
\hrulefill
- 例
この例では、「名前:」と「日付:」の後にそれぞれ水平線が引かれ、行の残りのスペースを埋めます。\documentclass{article} \begin{document} 名前: \hrulefill 日付: \hrulefill \end{document}
- 用途
- フォームの署名欄や日付欄など、記入すべき空白を示す場合。
- 見出しとページの間に線を引くなど、視覚的な区切りを設ける場合。
- 目次で、項目とページ番号の間に線を引きたい場合(あまり一般的ではありませんが、用途によってはありえます)。
- 機能
コマンドが置かれた場所から、行の残りの部分を一本の細い水平線で埋め尽くします。 - 意味
"horizontal rule fill" の略で、水平の線(罫線)で利用可能なスペースを埋めることを意味します。
\dotfill
- 例
この例では、目次のように「項目」と「ページ」の間に点線が引かれ、スペースを埋めています。\documentclass{article} \begin{document} \section*{目次} 項目 1 \dotfill 1ページ \\ 項目 2 \dotfill 5ページ \\ 長い項目名 \dotfill 10ページ \end{document}
- 用途
- 最も一般的な使用例は目次です。 目次の項目とページ番号の間を点線でつなぐことで、読者が容易に対応するページを見つけられるようにします。
- リストやインデックスなど、項目とそれに対応する情報の間を視覚的に結びつけたい場合。
- 機能
コマンドが置かれた場所から、行の残りの部分を点線(ドット)で埋め尽くします。 - 意味
"dot fill" の略で、点線で利用可能なスペースを埋めることを意味します。
共通の性質
- 他の要素との組み合わせ
これらのコマンドは、テキストや他のボックスと組み合わせて使用できます。例えば、テキスト \hrulefill テキスト
のように記述すると、2つのテキストの間に線が引かれます。 - 水平方向のみ
これらのコマンドは水平方向にのみ作用し、垂直方向のスペースを埋めることはできません。 - 自動調整
\hrulefill
と\dotfill
は、利用可能なスペースに合わせて自動的に線の長さ(またはドットの数)を調整します。これにより、手動でスペースを計算する必要がありません。
\hrulefill
と\dotfill
は非常に便利なコマンドですが、意図した通りに機能しない場合も少なくありません。ここでは、よくある問題とその解決策を説明します。
線や点線が表示されない、または短すぎる・長すぎる
問題の発生原因
\hrulefill
や\dotfill
は、利用可能な水平スペースを埋めるように設計されています。この「利用可能なスペース」がほとんどない、または予期せぬ形で制限されている場合に問題が発生します。
- tabular環境などでの使用
tabular
環境のセル内で使用する場合、セルの幅が固定されていると、意図したように伸びません。 - ボックス環境内での使用
\mbox
,\makebox
,\hbox
,minipage
などのボックス環境内で使用する場合、そのボックスの幅が固定されていると、埋めるべきスペースが限定されます。 - 段落の終了(\parや空行)
\hrulefill
や\dotfill
は、その直後に段落の終了を示す\par
(または空行)があると、その「伸縮性」が取り除かれてしまうことがあります。これは、TeXが段落の整形時に行末の不要な空白(glue)を削除する動作によるものです。 - スペースがない
例えば、行の残りの部分がすでに他のコンテンツで埋まっている場合。
トラブルシューティング
- 利用可能なスペースを確認する
\hrulefill
や\dotfill
を使用する際に、実際にその行でどれだけのスペースが利用可能かを確認してください。他の要素がすでに多くのスペースを占めている場合は、当然ながら線や点線が短くなります。 - tabular環境での対策
tabular
環境内でセルいっぱいに線を引く場合は、p{幅}
列タイプを使用して幅を明示的に指定し、その中で\hrulefill\mbox{}
のように使います。\begin{tabular}{p{0.5\textwidth}} \hrulefill\mbox{} \\ \end{tabular}
- 明示的に幅を指定する
\makebox
コマンドと組み合わせて、線や点線の幅を明示的に指定することもできます。
ただし、この方法だと、テキストの長さが変わった際に線や点線の長さも手動で調整する必要がある場合があります。\makebox[\linewidth]{\hrulefill} % 行全体の幅に線を引く \makebox[5cm]{\dotfill} % 5cmの点線を引く
- 直後に\mbox{}や\nullを置く
最も一般的な解決策は、\hrulefill
や\dotfill
の直後に\mbox{}
(または\null
)を置くことです。これにより、コマンドが生成する「伸縮可能な空白(glue)」が、段落の終了によって削除されるのを防ぎ、行の最後まで伸びるようになります。名前: \hrulefill\mbox{} 日付: \dotfill\null
線や点線の位置がずれる
問題の発生原因
線や点線は、デフォルトでベースライン(文字の底辺)上に引かれます。そのため、隣接するテキストのサイズや、前後の改行・スペースの入れ方によって、視覚的に位置がずれて見えることがあります。
トラブルシューティング
- 改行とスペースの調整
前後の改行(\\
)や段落間スペース(空行)が不必要に入っていないか確認してください。これらが余分な垂直方向のスペースを生み、レイアウトに影響を与えることがあります。 - \raiseboxを使用する
線や点線の垂直方向の位置を微調整したい場合は、\raisebox
コマンドを使用します。テキスト\raisebox{-0.5ex}{\hrulefill} % 少し下げる テキスト\raisebox{0.5ex}{\dotfill} % 少し上げる
\raisebox{高さ}[広がり][沈み]{内容}
のように使います。高さ
はベースラインからの垂直方向の移動量、広がり
と沈み
はボックス自体の垂直方向の占有スペースを指定します(通常は内容に合わせるので省略可)。
線や点線の太さ・点の密度を変更したい
問題の発生原因
\hrulefill
と\dotfill
のデフォルトの見た目(線の太さや点の密度)が、文書のデザインと合わない場合があります。
トラブルシューティング
- パッケージの利用
より柔軟なカスタマイズが必要な場合は、xhfill
やdashrule
のようなパッケージの利用も検討してください。これらのパッケージは、より高度な線や点線の描画機能を提供します。 - 定義を再定義する(上級者向け)
\hrulefill
や\dotfill
の定義を\renewcommand
を使って変更することで、見た目をカスタマイズできます。これはTeXの内部コマンドに関する知識が必要なため、注意が必要です。\documentclass{article} \makeatletter % @をコマンド名に含めるために必要 % hrulefillの太さを変更 \renewcommand{\hrulefill}{% \leavevmode\leaders\hrule height 1pt\hfill\kern\z@ } % dotfillの点の密度を変更 \renewcommand{\dotfill}{% \leavevmode\cleaders\hb@xt@ 1em{\hss.\hss}\hfill\kern\z@ } \makeatother % @の利用を終了 \begin{document} 通常の線: \hrulefill\mbox{} 太い線: \hrulefill\mbox{} 通常の点: \dotfill\mbox{} 間隔が広い点: \dotfill\mbox{} \end{document}
height 1pt
:\hrulefill
の線の高さを1ptに設定します。デフォルトは0.4pt程度です。\hb@xt@ 1em{\hss.\hss}
:\dotfill
の各点のボックスの幅を1emに設定します。この値を大きくすると点の間隔が広がり、小さくすると狭くなります。
Overfull \hbox または Underfull \hbox 警告
問題の発生原因
\hrulefill
や\dotfill
は伸縮する要素ですが、行の残りのスペースを正確に埋めることができない場合にこれらの警告が出ることがあります。
- Underfull \hbox
線や点線が利用可能なスペースを完全に埋めきれず、行が短くなっている場合。これは通常、前述の「直後に\mbox{}
や\null
を置く」対策を怠った場合に発生しやすいです。 - Overfull \hbox
行の幅を超えて線や点線が伸びてしまっている場合(稀ですが、他の要素との兼ね合いで発生する可能性)。
- 段落の整形方法の見直し
\flushleft
や\flushright
、\centering
などの環境やコマンドが、\hrulefill
や\dotfill
の挙動に影響を与える場合があります。特に、\flushleft
や\raggedright
は右端が揃わないため、\hrulefill
や\dotfill
が自動的に行の最後まで伸びません。この場合は、\makebox[\linewidth]{...}
などで明示的に幅を指定する必要があります。 - 行の幅の確認
\textwidth
や\linewidth
といった長さコマンドを使って、現在の行の幅が適切であることを確認します。必要に応じて、\hspace{}
や\parbox
などでレイアウトを調整します。 - \mbox{}または\nullの確認
Underfull \hbox
の多くは、\hrulefill
や\dotfill
の直後にこれらが欠けていることが原因です。必ず追加してください。
ここでは、\hrulefill
と\dotfill
の基本的な使い方から、よくある問題の回避策、応用例まで、さまざまなコード例を挙げます。
基本的な使い方
最も単純な使用例です。行の残りのスペースを線または点で埋めます。
\documentclass{article}
\usepackage[utf8]{inputenc} % 日本語対応
\begin{document}
% hrulefillの基本的な使い方
名前: \hrulefill
% dotfillの基本的な使い方
項目A \dotfill 1ページ
\end{document}
- 解説
名前: \hrulefill
:名前:
の後に、行の最後まで水平線が引かれます。項目A \dotfill 1ページ
:項目A
と1ページ
の間に点線が引かれ、行の残りのスペースを埋めます。
よくある問題とその解決策 (\mbox{} または \null の利用)
\hrulefill
や\dotfill
の直後に改行や段落の終わりが来ると、期待通りに伸びないことがあります。これを避けるために\mbox{}
や\null
を最後に配置するのが一般的です。
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
\section*{問題点と解決策}
% 問題点: 期待通りに線が伸びない例(行末に\parや空行が来ると伸縮性が失われる)
これは問題がある例です。線: \hrulefill
これは問題がある例です。点線: \dotfill
\bigskip % 少し空白を入れます
% 解決策: \mbox{} または \null を最後に置く
これは解決策です。線: \hrulefill\mbox{}
これは解決策です。点線: \dotfill\null
% テキストの間に線を入れる場合
開始テキスト \hrulefill\mbox{} 終了テキスト
% テキストの間に点線を入れる場合
開始項目 \dotfill\null 終了ページ
\end{document}
- 解説
- 最初の
\hrulefill
と\dotfill
は、その後に改行や段落の終わりが来るため、線の伸縮性が失われ、行の最後まで伸びない(または警告が出る)可能性があります。 \hrulefill\mbox{}
や\dotfill\null
とすることで、\mbox{}
(または\null
)が小さなボックスとして存在するため、\hrulefill
や\dotfill
が適切に伸縮し、行の最後まで伸びるようになります。- テキストとテキストの間に線や点線を入れる場合も同様に
\mbox{}
や\null
を使うと良いでしょう。
- 最初の
目次の作成(\dotfillの最も一般的な用途)
\dotfill
は目次で項目とページ番号をつなぐために頻繁に使用されます。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{titlesec} % セクションの見た目をカスタマイズするためのパッケージ(ここでは使っていませんが、目次ではよく使われる)
\begin{document}
\section*{簡単な目次}
% ここは手動で記述する目次の例です。
% 実際の目次は通常、\tableofcontentsコマンドと\sectionなどで自動生成されます。
Chapter 1: はじめに \dotfill\null 1 \\
Chapter 2: 理論 \dotfill\null 15 \\
Chapter 3: 実験 \dotfill\null 32 \\
Chapter 4: 結論 \dotfill\null 45
\end{document}
- 解説
- 各行で
\dotfill
が項目名とページ番号の間を点線で埋めています。\null
を使うことで、点線がページ番号の直前まで伸びるようにしています。 - 実際のLaTeX文書では、
\section
や\chapter
などの構造化コマンドを使い、\tableofcontents
コマンドを文書の冒頭に置くことで、目次を自動生成するのが一般的です。この自動生成される目次では、\dotfill
が内部的に使用されています。
- 各行で
固定幅で線や点線を引く (\makebox の利用)
特定の長さの線や点線を引きたい場合は、\makebox
と組み合わせて使用します。
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
\section*{固定幅の線と点線}
短い線: \makebox[3cm]{\hrulefill}
長い点線: \makebox[8cm]{\dotfill}
% 行の幅いっぱいに線や点線を引く
\noindent\makebox[\linewidth]{\hrulefill}
\noindent\makebox[\textwidth]{\dotfill}
\end{document}
- 解説
\makebox[幅]{内容}
は、指定された幅を持つボックスを作成します。\makebox[3cm]{\hrulefill}
:3cmの長さの水平線を作成します。\makebox[8cm]{\dotfill}
:8cmの長さの点線を作成します。\linewidth
は現在の行の幅、\textwidth
は本文領域の幅を表します。\noindent
は、その行の先頭のインデントをなくすコマンドです。これらを組み合わせることで、行全体にわたる線や点線が引けます。
tabular 環境での利用
tabular
環境内でセルいっぱいに線や点線を引く場合にも使用できますが、セルの幅を考慮する必要があります。
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
\section*{tabular環境での使用}
\begin{tabular}{|l|p{5cm}|} % 左寄せ、幅5cmの段落型セル
\hline
項目 & 説明 \\
\hline
名前 & \hrulefill\mbox{} \\
住所 & \hrulefill\mbox{} \\
サイン & \dotfill\null \\
\hline
\end{tabular}
\end{document}
- 解説
p{5cm}
列タイプは、指定された幅(ここでは5cm)を持つ「段落」のようなセルを作成します。この中で\hrulefill\mbox{}
を使用すると、セルいっぱいに線が引かれます。l
列タイプ(左寄せ)のセルでは、内容の幅によって線の長さが変わります。
線や点線の位置調整 (\raisebox)
線や点線がテキストのベースラインと揃わない場合、\raisebox
で微調整できます。
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
\section*{位置調整}
通常: テキスト \hrulefill\mbox{}
少し下げる: テキスト \raisebox{-0.5ex}{\hrulefill}\mbox{}
通常: 項目 \dotfill\null ページ
少し上げる: 項目 \raisebox{0.3ex}{\dotfill}\null ページ
\end{document}
- 解説
\raisebox{高さ}[広がり][沈み]{内容}
コマンドは、指定された高さだけ内容を上下に移動させます。\raisebox{-0.5ex}{\hrulefill}
:\hrulefill
を0.5ex("ex"は小文字の'x'の高さに相当する単位)だけ下に移動させます。\raisebox{0.3ex}{\dotfill}
:\dotfill
を0.3exだけ上に移動させます。- 値は負数で下、正数で上になります。最適な値はフォントや文脈によって調整が必要です。
LaTeXにおける\hrulefill
と\dotfill
の代替方法
\hrulefill
と\dotfill
はシンプルで便利ですが、より柔軟なカスタマイズが必要な場合や、特定のレイアウト要件がある場合には、他のコマンドやパッケージが非常に役立ちます。
\leadersコマンド
\hrulefill
と\dotfill
の基盤となっているのが\leaders
コマンドです。これを使うと、繰り返し表示するパターンを自由に定義できます。
-
解説
\leaders<leader box or rule>\hfill
という形式で使います。<leader box or rule>
が繰り返される要素です。\hbox to 0.8em{\hss-\hss}
: 幅0.8emのボックスを作成し、その中央にハイフンを配置しています。\hss
は、ボックス内で内容を中央揃えにするための「非常に伸縮性のある空白」です。この0.8em
の値を調整することで、ハイフンの間隔を制御できます。\hrule height 1pt
: 高さ1ptの水平線(罫線)を繰り返します。これで線の太さを変更できます。\hfill
: 残りのスペースを埋めるための伸縮性のある空白です。\hrulefill
や\dotfill
と同様に、直後に\mbox{}
や\null
を置くことで、行の最後まで伸びるようにします。
-
使用例
\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{amsmath} % 数式環境で使用されるが、ここでは\text{}のためにロード \begin{document} \section*{1. \texttt{\string\leaders}コマンド} % ハイフンで埋める 項目A \leaders\hbox to 0.8em{\hss-\hss}\hfill\mbox{} 1ページ % アスタリスクで埋める 項目B \leaders\hbox to 0.8em{\hss*\hss}\hfill\mbox{} 5ページ % カスタムの点線(間隔を調整) 項目C \leaders\hbox to 1.2em{\hss.\hss}\hfill\mbox{} 10ページ % 太い線 署名 \leaders\hrule height 1pt\hfill\mbox{} \end{document}
-
利点
- 繰り返す内容を完全に制御できます。点線の代わりにハイフン、アスタリスク、任意の文字、あるいは小さな図形を繰り返すことができます。
- 線の太さ、点の密度、間隔などを細かく調整できます。
-
機能
指定したボックス(またはルール)を、利用可能なスペース全体にわたって繰り返し配置します。\hrulefill
は細い水平線、\dotfill
はピリオドのボックスを繰り返しているだけです。
ulem パッケージ(下線や打ち消し線など)
ulem
パッケージは、文字に下線、二重線、打ち消し線などを引くためのものですが、その一部の機能は水平線を引く代替として利用できます。
-
解説
\uline{テキスト}
:テキスト
に下線を引きます。空のスペースや\phantom{}
(内容は見えないが、その分の幅と高さを持つボックスを作成)と組み合わせることで、罫線のように利用できます。- これは
\hrulefill
のように行の残りを自動で埋めるのではなく、あくまで指定したコンテンツに下線を引くためのものです。フォームの記入欄など、固定長の線が必要な場合に適しています。
-
使用例
\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{ulem} % ulemパッケージをロード \begin{document} \section*{2. \texttt{ulem} パッケージ} 氏名: \uline{ } % スペースに下線 日付: \uline{\phantom{これは日付のサンプルです}} % 見えないテキストに下線 \end{document}
-
利点
テキストの整形と一体化して下線を引ける。 -
機能
テキストの長さに合わせて下線を引くのに適しています。
xhfill パッケージ
xhfill
パッケージは、\hrulefill
と\dotfill
を拡張し、より多くの種類の線(波線、破線、カスタムの点など)を提供します。
-
解説
\xhrulefill
,\xdotfill
: それぞれ標準の\hrulefill
,\dotfill
に相当します。\xdashfill{長さ}
: 指定した長さの破線で埋めます。\xwavefill{rule}
: 波線で埋めます。rule
部分で線の太さなどを指定できます。\xfilll{パターン}
: 任意のパターン(テキスト、シンボル、小さなグラフィックなど)を繰り返して埋めます。\scalebox
はgraphicx
パッケージのコマンドで、内容の大きさを調整します。\mbox{}
はここでも必要です。
-
使用例
\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{xhfill} % xhfillパッケージをロード \begin{document} \section*{3. \texttt{xhfill} パッケージ} % デフォルトのhrulefillと同様 線: \xhrulefill % デフォルトのdotfillと同様 点線: \xdotfill % 破線 破線: \xdashfill{5pt} % 破線の長さを指定 (5pt) % 波線 波線: \xwavefill{\hrule height 0.3pt} % 波線(線の太さを指定) % カスタムパターン(例: 三角形) カスタム: \xfilll{\scalebox{0.5}{$\triangle$}}\mbox{} % 小さな三角形を繰り返す \end{document}
-
利点
\hrulefill
や\dotfill
と同様の直感的な使用感で、多様な線種が利用できます。- 破線や波線など、標準では難しいパターンを簡単に実現できます。
-
機能
様々なパターンで水平スペースを埋めるための専用コマンドを提供します。
tikz
パッケージはLaTeXで図形を描画するための非常に強力なツールです。線や点線を引くだけでなく、任意の複雑なグラフィック表現が可能です。
-
解説
\tikz \draw (x1,y1) -- (x2,y2);
: (x1,y1)から(x2,y2)へ線を引きます。[dashed]
:破線にします。[dotted]
:点線にします。line width=...
:線の太さを指定します。dash pattern=on <length> off <length>
:点線や破線のパターンを細かく定義できます。\linewidth
:現在の行の幅を表すLaTeXの長さです。TikZ内で直接使用することで、行全体にわたる線を描けます。baseline=(current bounding box.south)
:描画されるTikZの領域のベースラインを、その領域の最下部に合わせる設定です。これにより、テキストと同じ行にきれいに配置しやすくなります。- TikZは非常に強力ですが、
\hrulefill
や\dotfill
のような自動でスペースを埋める機能は直接提供しません。そのため、行の幅を計算したり、座標を指定したりする手間が発生します。
-
使用例
\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{tikz} % tikzパッケージをロード \begin{document} \section*{4. \texttt{tikz} パッケージ} % 線を引く (特定の座標間) テキスト \tikz[overlay,remember picture] \draw (0,0) -- (3,0); % 相対座標で3cmの線 \hspace*{3cm} \tikz[overlay,remember picture] \draw[dashed] (0,0) -- (3,0); % 3cmの破線 \vspace{1cm} % レイアウト調整 % 行の残りを埋めるようなTikZの使用例(より複雑なアプローチ) \noindent\tikz[baseline=(current bounding box.south)]{ \draw[line width=0.5pt] (0,0) -- (\linewidth,0); % 行の幅いっぱいの線 } \noindent\tikz[baseline=(current bounding box.south)]{ \draw[dotted, line width=0.3pt, dash pattern=on 0.5pt off 1pt] (0,0) -- (\linewidth,0); % カスタム点線 } \end{document}
-
欠点
比較的学習コストが高い。単純な線を引きたいだけならオーバーキルかもしれません。 -
利点
- 究極の柔軟性。線の種類、太さ、色、端点の形状、点線・破線のパターンを完全に制御できます。
- テキストと図形を完全に統合したレイアウトが可能です。
-
機能
座標を指定して、線、円、四角形、複雑なパスなどを描画できます。点線や破線も非常に細かくカスタマイズ可能です。
- どんな図形でも描きたい、究極のカスタマイズが必要なら
tikz
パッケージが最適ですが、学習コストと手間がかかります。 - テキストの下線や固定長の線なら
ulem
パッケージ(\uline
)も選択肢になります。 - 破線、波線など、より多様なフィルパターンが必要なら
xhfill
パッケージが非常に便利です。 - 線の太さや繰り返すパターンを細かく制御したいなら
\leaders
コマンドが最も強力で柔軟です。 - シンプルに水平線を引く/点線で埋めるなら
\hrulefill
と\dotfill
(\mbox{}
または\null
との組み合わせ必須)が最も簡単で適切です。