web-dev-qa-db-ja.com

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

私が書いているLaTeX文書では、行末にレンダリングされる「multi-disciplinary」という単語のためにoverfull hbox警告を受け取ります。

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

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

ダッシュを既に含むWordで正しいインデントを取得するには、どの呪文が必要ですか?

ボーナス質問:自分自身でその質問の答えをどこで見つけることができましたか?

100
Gyom

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

TeXは、既にハイフネーションされているWordをハイフネーションしません。たとえば、(似顔絵)英語の姓Smyth-Postlethwaiteはハイフネーションを行わないため、面倒な場合があります。これは正しい英語植字スタイルです(他の言語では正しくない場合があります)が、必要に応じて、名前のハイフンを\hyphコマンドで置き換えて定義できます。

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

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


または、\newcommandmulti-discipli\-naryに展開するコマンドを使用できます(既存の単語を検索するには、[検索] + [すべて置換]を使用します)。

51
kennytm

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

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

そのハイフンで壊れないようにするには、multi\=/disciplinaryを使用します

(余談:The Chicago Manual of StyleWordが曖昧であるか、それなしでは理解できない。)

58
Luke M

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

21
Zouppen

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

私はこれがなぜ機能するのかわからないことを認めます。説明されている動作とは異なります here (emphasis mine):

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

5
rudolfbyker
multi\hskip0pt-\hskip0pt disciplinary

できますのように定義する

\def\:{\hskip0pt}

そして書く

multi\:-\:disciplinary

ロシアのbabelパッケージには、ハイフネーションを禁止しない独自のダッシュセットがあります。たとえば、"~(二重引用符+チルダ)です。

3
Michael

同じ問題がありました。 hyphenat と次のマクロを使用します。

\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コマンドになり、Wordの残りの部分でWordブレークを有効にします。これは、明示的なハイフンを含むすべての単語を通常どおりハイフネーションにする一般的なソリューションです。

-は完全には拡張できないマクロになるため、-がマクロであるとは思わない他のパッケージを読み込んだ後にこれを含めるようにしてください。

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

3
JanKanis