
次の例のように、長いキーワードをハイフンで区切ろうとしています。
\documentclass[10pt]{article}
\usepackage{underscore}
\begin{document}
\pagestyle{empty}
\parbox{1pt}{TESTSTRING\_TESTSTRING\_HYPHENATION}
\\\\
%\begin{figure}[here]
%\centerline{\includegraphics*[width=0.8\paperwidth]{/pictures/regular_testname.png}}
%\centerline{\includegraphics*[width=0.8\paperwidth]{/pictures/escaped\_testname.png}}
%\end{figure}
\end{document}
私は試したこれそしてこれなどを試しましたが、成功しませんでした。例の図のコメントを外すと、underscore
ファイル名のアンダースコアが正しく解釈されなくなるため、-package で問題が発生します。このパッケージを使用しないと、画像を挿入できますが、文字列がハイフンで区切られません。
たとえば次のように、適切かつ局所的にハイフンで区切る方法をご存知ですかTESTSTRING\myUnderTESTSTRING\myUnderHYPHENATION
?
また、文字列をハイフンで区切るときにハイフンが書き込まれないように制御するにはどうすればよいでしょうか。これがさらに望ましいでしょう。
補足質問ですが、私の例では、文字列の最初の部分がハイフンで区切られていないのはなぜでしょうか?
答え1
おそらく、パッケージを使用せずに、次のような方法が役立つでしょう。パッケージを使用しないunderscore
方が望ましいようです (使用しない方が望ましいようです)。これは、 によるハイフン付けをアクティブにし、の\newuson
元の定義を復元します。このオン/オフ メカニズムを通じて、変更の範囲を制御できます。\_
\newusoff
また、アンダースコアの「ハイフネーション」にはダッシュがありませんが、質問を正しく理解していれば、これも望ましいように思われます。
いずれにしても、段落の最初の単語をハイフンで区切るには、\hspace{0pt}
段落の先頭に a が必要です。
\documentclass{article}
%\usepackage{underscore}
\textwidth0pt
\let\svus\_
\newcommand\newuson{\def\_{\svus\allowbreak\hspace{0pt}}}
\newcommand\newusoff{\let\_\svus}
\begin{document}
TESTSTRING\_TESTSTRING\_HYPHENATION
\newuson
\hspace{0pt}TESTSTRING\_TESTSTRING\_HYPHENATION
\newusoff
TESTSTRING\_TESTSTRING\_HYPHENATION
\end{document}
答え2
アンダースコア付きの長い文字列をマクロの引数として保持したい場合は、簡単です。
\documentclass[10pt]{article}
\DeclareRobustCommand\Name[1]{{%
\let\_\hyphenationunderscore#1%
}}
\newcommand{\hyphenationunderscore}{%
\textunderscore\nobreak\hspace{0pt}%
}
\begin{document}
\pagestyle{empty}
\parbox{1pt}{
\hspace{0pt}%
\Name{TESTSTRING\_TESTSTRING\_HYPHENATION}
}
\end{document}
グローバルに再定義することもできます\_
。
\documentclass[10pt]{article}
\renewcommand{\_}{%
\textunderscore\nobreak\hspace{0pt}%
}
\begin{document}
\pagestyle{empty}
\parbox{1pt}{
\hspace{0pt}%
TESTSTRING\_TESTSTRING\_HYPHENATION
}
\end{document}
あるいは、以下を_
アクティブにすることもできます:
\documentclass[10pt]{article}
\newcommand{\hyphenationunderscore}{%
\textunderscore\nobreak\hspace{0pt}%
}
\catcode`_=\active
\protected\def_{\ifmmode\sb\else\hyphenationunderscore\fi}
\begin{document}
\pagestyle{empty}
\parbox{1pt}{
\hspace{0pt}%
TESTSTRING_TESTSTRING_HYPHENATION
}
\end{document}
TeX は glue が先行しない単語をハイフンで区切らないため、 を使用しない場合は で\hspace{0pt}
ハイフン区切りが行われないことに注意してください。\parbox
アンダースコアの後も改行したい場合は、全体\nobreak
を に変更します\linebreak[0]
。たとえば、2番目の解決策は次のようになります。
\documentclass[10pt]{article}
\usepackage[T1]{fontenc}
\renewcommand{\_}{%
\textunderscore\linebreak[0]\hspace{0pt}%
}
\begin{document}
\pagestyle{empty}
TESTSTRING\_TESTSTRING\_HYPHENATION
\parbox{1pt}{
\hspace{0pt}%
TESTSTRING\_TESTSTRING\_HYPHENATION
}
\end{document}
ここでの出力は、T1 で何が起こるかを示しています。