LaTeXにダッシュを含む単語をハイフネーションさせるにはどうすればよいですか?


107

私が書いているLaTeXドキュメントでは、行の終わりにたまたま "多分野"という単語が表示されるため、hbox警告がいっぱいになります。

この特定の警告はに変更することで取り除くことができますmulti-discipli\-naryが、この単語は論文でよく使用されているため、他の場所でも同じ問題が発生します。

\hyphenation{}代わりにコマンドを使用したいのですが\hyphenation{multi-disci-pli-na-ry}、最初のダッシュが正しく理解されていないため、一時的に機能しません。

すでにダッシュが含まれている単語で正しいインデントを取得するには、どのような呪文が必要ですか?

おまけの質問:自分でその質問の答えをどこで見つけられましたか?


ハードなハイフンで単語が壊れることはなぜ問題なのですか?「マルチ\改行次元」は大丈夫ですか?
ジェフリーディ2010

1
おまけの回答:「ラテックスハイフネーション」をグーグル検索すると、あらゆる種類の有用な結果が得られました。これには、次の回答が含まれるラテックスウィキブックが含まれています:en.wikibooks.org/wiki/LaTeX/Formatting#Hyphenation
Mica

3
@mica:いいえ、ありません。私は何年も前にそれらすべてのページを読みました。@geoff:ラテックスがハイフンを使用していても大丈夫です。ただし、この例では、「アンダーボックスhbox」が発生し、latexはハイフネーションをまったく行わないことを選択します。
Gyom

\ hyphenationコマンドで最初のバックスラッシュを使用できますか?
Brian Postow、2010年

1
コメント@DrewSteenをありがとう。明らかに同意します。しかし、私の防御では、この質問をしたときにtex.SXのようなものはありませんでした:-)
Gyom

回答:


52

https://texfaq.org/FAQ-nohyphから:

TeXは、既にハイフネーションされている単語をハイフネーションしません。たとえば、(似顔絵)英語の姓であるSmyth-Postlethwaiteはハイフネーションを行わないため、問題が発生する可能性があります。これは正しい英語の組版スタイルです(他の言語では正しくない可能性があります)が、必要に応じて、名前のハイフンを\hyph 定義済みのコマンドに置き換えることができます。

 \def\hyph{-\penalty0\hskip0pt\relax}

これは、このFAQが通常お勧めするようなものではありませんhyphenatパッケージは、そのようなコマンドのバンドルを定義します(さまざまな句読文字にハイフネーションポイントを導入するため)。


または\newcommand、次のように展開するコマンドをmulti-discipli\-nary使用することもできます(検索+すべて置換を使用して、既存の単語を置き換えます)。


どうもありがとう。私が疑ったように、「完璧な」答えはありません。そのドキュメントの著者は私だけではないので、他の人に\newcommandあらゆる場所で使用することを強制したくありません(そのため、に基づいて何かを探していました\hyphenation)。デフォルトでは「そのまま」にして、ラテックスが過剰なhboxについて不平を言ったときに明示的なハイフンを手動で追加すると思います。
Gyom

63

問題は(KennyTMが述べたように)LaTeXがダッシュを含む単語をハイフネーションしないことです。幸いなことに、まさにその問題に対処する標準パッケージ(ncctoolsの一部)がありますextdash。これは、ハイフネーションを中断せず、ハイフン/ダッシュでの改行を許可または防止できる新しいハイフンおよびダッシュコマンドを定義します。私はshortcutsオプションでそれを使用することを好むので、たとえばで\-/はなく使用できます\Hyphdash。ここにあなたが欲しいものがあります:

\usepackage[shortcuts]{extdash} ... multi\-/disciplinary

そのハイフンでの改行を防ぐには、 multi\=/disciplinary

(さておき:Chicago Manual of Styleでは、「multi」のような接尾辞を付けたハイフンを削除することをお勧めしています。


これはすばらしいですが、章の文字列で使用すると、ハイパーリファレンス警告が表示されますPackage hyperref Warning: Token not allowed in a PDF string。そこで、他の提案されたソリューション(\def\hyph{-\penalty0\hskip0pt\relax})が機能します。
Jan-Philip Gehrcke博士、2014

1
@ Jan-PhilipGehrcke:これらの警告は、\texorpdfstring(章のタイトルに入る文字列の条件付きコンパイルを提供する)を使用して修正することもできます。セマンティックマクロ内での使用を非表示にします(ここではおそらく\multidisciplinary)。はい、完璧ではありません。
Blaisorblade 2017

22

私はパッケージを使用してhyphenat、フィンランド語のInternet-yhteysインターネット接続など)のような複合語をとして記述しInternet\hyp yhteysます。間抜けに見えますが、私が見つけた最もエレガントな方法のようです。


6

multi-disciplinarykennytmで説明されているように、ハイフネーションされません。しかしmulti-\-disciplinary、ハイフネーションの機会は同じmultidisciplinaryです。

私はなぜこれが機能するのか分からないことを認めます。ここで説明する動作とは異なります(私の強調):

このコマンドは\-、任意のハイフンを単語に挿入します。これは、この単語でハイフネーションが許可される唯一のポイントにもなります。


で置き換え--\-も出力は変更されません。少なくともoverleaf.comのデフォルト設定(おそらくpdflatexですが、overleafは実際にはそうではありません)を使用します。
Camille Goudeseune

4

私も同じ問題を抱えていました。私はハイフンと次のマクロを使用します:

\RequirePackage{hyphenat}
\RequirePackage{expl3}


% The following defs make sure words that contain an explicit `-` (hyphen) are still hyphenated the normal way, and double- and triple hyphens keep working the way they should. Just don't use a `-` as the last token of your document. Also note that `-` is now a macro that is not fully expandable

\ExplSyntaxOn

% latex2e doesn't like commands starting with 'end', apparently expl3 doesn't have any problems with it
\cs_new:Npn \hyphenfix_emdash:c {---}
\cs_new:Npn \hyphenfix_endash:c {--}

\cs_new:Npn \hyphenfix_discardnext:NN #1#2{#1}


\catcode`\-=\active

\cs_new_protected:Npn -{
    \futurelet\hyphenfix_nexttok\hyphenfix_i:w
}

\cs_new:Npn \hyphenfix_i:w {
    \cs_if_eq:NNTF{\hyphenfix_nexttok}{-}{
        %discard the next `-` token
        \hyphenfix_discardnext:NN{\futurelet\hyphenfix_nexttok\hyphenfix_ii:w}
    }{
        % from package hyphenat
        \hyp
    }
}

\cs_new:Npn \hyphenfix_ii:w {
    \cs_if_eq:NNTF{\hyphenfix_nexttok}{-}{
        \hyphenfix_discardnext:NN{\hyphenfix_emdash:c}
    }{
        \hyphenfix_endash:c
    }
}


\ExplSyntaxOff

これは、latex3のexpl3パッケージを使用することに注意してください。

-前方にスキャンしてアクティブな文字を作成し、その後にダッシュが続くかどうかを確認します。その場合は、-確認-----て作業を続けるためにに留まります。そうでない場合、それは\hypハイフンからのコマンドになり、残りの単語の単語分割を有効にします。これは、明示的なハイフンを含むすべての単語を通常どおりハイフネーションする一般的なソリューションです。

-完全に拡張可能ではないマクロになり、それほど期待しないかもしれない他のパッケージロードした後、これを含めるようにしようと-マクロことを

編集:これは私の2番目のバージョンです。最初のバージョンは、ハイフンを使用した場合、{または}ハイフンを使用した場合の堅牢性が低下しました。これはそうではありませんが、最初のバージョンとは異なり、-このバージョンのは完全に拡張可能ではありません。


3
multi\hskip0pt-\hskip0pt disciplinary

たとえば、次のように定義できます

\def\:{\hskip0pt}

そして書く

multi\:-\:disciplinary

バベル語のロシア語パッケージには、ハイフネーションを禁止しない独自のダッシュのセット"~(たとえば、二重引用符とチルド)があることに注意してください。


1
する必要がありますmulti-\hskip0pt disciplinary。あなたのMWEのように、それは過度に催眠術をかけます。\setlength{\textwidth}{0.1cm}それを試すために設定するだけです。
LaRiFaRi 2014

-3

私はここで同様のことを答えました:LaTeXはあまりにも多くの単語を分解します

私は言った:

プリアンブルのどこかにハイフネーションペナルティを設定する必要があります。

\hyphenpenalty=750

750の値は、12 ptフォントのレターペーパー(8.5x11インチ)での2列のレイアウトに対する私のニーズに適しています。必要に応じて値を調整します。数値が大きいほど、ハイフネーションが少なくなります。ハイフネーションパッケージを確認することもできます。ハイフネーションペナルティだけではありません。


1
彼は、制限を定義する方法ではなく、ハイフネーションを回避する方法を尋ねています。
Andras Gyomrey 2013

-4

既にハイフネーションされた単語のハイフネーションを回避するために、改行しないスペース~と後方スペースを組み合わせて使用しました\!。たとえば、コマンド

3~\!\!\!\!-~\!\!\!D

テキストで使用され、単語3-Dのハイフネーションを抑制します。おそらく最善の解決策ではありませんが、それは私にとってはうまくいきました!


4
これは、何が尋ねられたかという反対の質問に答えています。また、それを指摘するためにあなたの投稿を編集しようとした人が言ったように、あなたがしたことを行うにはもっと良い方法があります:\mbox{3-D}
zwol
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.