118

私が書いている LaTeX ドキュメントでは、たまたま行末にレンダリングされる「複数分野」という単語が原因で、hboxがいっぱいになるという警告が表示されます。

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

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

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

おまけの質問: その質問に対する答えを自分でどこで見つけることができたでしょうか?

4

9 に答える 9

67

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

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

そのハイフンでの改行を防ぐには、次を使用しますmulti\=/disciplinary

(余談:シカゴ マニュアル オブ スタイルは、'multi' のような接尾辞を付けているハイフンを削除することを推奨しています。

于 2011-12-27T20:48:45.897 に答える
55

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

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

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

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


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

于 2010-02-03T16:17:25.427 に答える
26

package を使って、フィンランド語のInternet-yhteys (Eng. Internet connection )のhyphenatような複合語を として書きます。間抜けに見えますが、私が見つけた最もエレガントな方法のようです。Internet\hyp yhteys

于 2010-12-15T20:11:38.507 に答える
7

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

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

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

于 2015-09-17T15:57:14.870 に答える
5

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

\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 番目のバージョンです。最初のバージョンは、ハイフンの後に{orが続くと堅牢性が低下しました。}これはそうではありませんが、最初のバージョンとは異なり、-このバージョンの は完全には拡張できません。

編集2:これを修正するための私のモジュールは、次のようになりました。私はもう Latex を使用しておらず、これを書いたのは 10 年以上も前のことなので、以下がまだ機能するかどうかはわかりません。買い手責任負担!

\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

% The original hyphen is available as the \hp command.

\ExplSyntaxOn

\cs_new:Npn \hp {-}

% make hyphen the normal character
\cs_new:Npn \hyphenfixdisabled {
  \catcode`\-=12\relax
}


\cs_new:Npn \hyphenfix_emdash:c {---}
\cs_new:Npn \hyphenfix_endash:c {--}

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

\cs_new:Npn \hyphenfix_ignore:c {-}


\catcode`\-=\active


%Making hyphen an active character throughout a document can lead to unexpected errors, especially if it is being edited by multiple persons. This note command at the beginning of what will be the meaning of `-' will hopefully help diagnose errors resulting from hyphen behaving unexpectedly.
\catcode`\!=11
\catcode`\.=11

\let \Note:hyphen_is_an_active_character!_see_hyphenfix.tex! \relax

\cs_new_protected:Npn \hyphenfix_fixhyphen:w{
    \if_mode_math:
        \hp
    \else: \use_i_after_fi:nw {
        \Note:hyphen_is_an_active_character!_see_hyphenfix.tex!
        \futurelet\hyphenfix_nexttok\hyphenfix_i:w
        }
    \fi:
}
\catcode`\!=12
\catcode`\.=12

\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
    }
}

\cs_new:Npn \hyphenfixenable {
  \catcode`\-=\active
  \let-\hyphenfix_fixhyphen:w
}
\cs_new:Npn \hyphenfixdisable {
  \let-\hyphenfix_ignore:c
  \catcode`\-=12\relax
}

\catcode`\-=12\relax

\ExplSyntaxOff
于 2011-08-08T11:05:22.823 に答える
5
multi\hskip0pt-\hskip0pt disciplinary

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

\def\:{\hskip0pt}

そして書く

multi\:-\:disciplinary

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

于 2011-11-10T05:56:48.853 に答える
-2

私はここで似たようなことを答えました:LaTeXがあまりにも多くの単語を分割しています

私は言った:

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

\hyphenpenalty=750

750 という値は、12 ポイントのフォントを使用した便箋 (8.5x11 インチ) の 2 列のレイアウトに対する私のニーズに適していました。ニーズに合わせて値を調整します。数値が大きいほど、ハイフネーションが少なくなります。hyphenatpackage も参照してください。ハイフネーションのペナルティだけではありません。

于 2010-02-03T16:31:42.527 に答える
-3

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

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

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

于 2010-05-12T22:32:59.513 に答える