f

アーカイブ

2013-07-30

アンダーバーを含んだ長い単語の折り返し

very_long_wordというようにアンダースコア_(アンダーバー, underscore, underbarともいう)で語句をつないだ文字列は、LaTeXでは1つの単語として扱われる。そのため、LaTeXが自動で行ってくれる折り返し、改行、ハイフネーションがなされず、ページや表などではみ出ることがある。
従来では、これに対応するため、手動で改行したり、アンダーバーの箇所でスペースをいれたり、配置を工夫することでなんとか対応していた。しかし、表で多くの変数の説明を書くときなどでは1つ1つ対応することが非常に手間で限界を感じていた。
再び表で用語をまとめる機会にあたり、アンダースコアを含む長い単語で折り返しがなされないという同様の問題に直面した。解決策を探していると以下のサイトを発見した。
http://mrtextminer.wordpress.com/2009/02/26/break-a-long-word-containing-underscores-in-latex/
LaTeXではアンダースコア(_)を文書中に書くには、特殊文字であるため通常\_というようにエスケープしなくてはいけない(LyXでは_を入力するとLaTeX sourceで自動で\_が入力されていることがわかる)。
このサイトでは、以下に示すように\_の直後で折り返しができるように見えない空白を入れるように新しく定義した\myunderscoreというコマンドを定義することで問題を解決している。
%Redefine the underscore command
\let\underscore\_
\newcommand{\myunderscore}{\renewcommand{\_}{\underscore\hspace{0pt}}}
%Issue the changed underscore command to the whole document.
\myunderscore
この例を参考に、もともとの\_自体を書き直すことでLyXで_を使うときにも折り返しを可能にする。以下のコマンドをプリアンブルに書き、\_の直後での折り返しを可能にすることで、アンダーバーを含む長い単語中での折り返しを実現できた。
\let\underscore\_
% \renewcommand{\_}{\underscore\hspace{0pt}} % 下の記述と意味は同じ
\def\_{\underscore\hspace{0pt}}

0 件のコメント:

コメントを投稿