アンダースコアを含む単語のローカルハイフネーション

アンダースコアを含む単語のローカルハイフネーション

次の例のように、長いキーワードをハイフンで区切ろうとしています。

\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 で何が起こるかを示しています。

ここに画像の説明を入力してください

関連情報