Как заставить LaTeX переносить слово, содержащее тире?
в латексном документе, который я пишу, я получаю переполненный hbox предупреждение из-за слова "мультидисциплинарный", которое оказывается в конце строки.
Я могу избавиться от этого предупреждения меняя его в multi-discipli-nary, но та же проблема будет происходить и в других местах, так как это слово используется много в статье.
Я хотел бы использовать hyphenation{} команда вместо этого, но, очевидно, мой предварительный hyphenation{multi-disci-pli-na-ry} не работает, потому что это не поймите первый тире правильно.
какое заклинание МНЕ нужно, чтобы получить правильный отступ в слове, которое уже содержит прочерк?
бонусный вопрос: где я мог найти ответ на этот вопрос сам?
8 ответов:
от http://www.tex.ac.uk/cgi-bin/texfaq2html?label=nohyph:
TeX не будет переносить слово, которое уже было перенесено. Например, (карикатурная) английская фамилия Smyth-Postlethwaite не будет дефисом, что может быть хлопотно. Это правильный английский стиль набора текста (он может быть неправильным для других языков), но при необходимости вы можете заменить дефис в имени на , определено
\def\hyph{-\penalty0\hskip0pt\relax}это не то, что этот FAQ обычно рекомендует...hyphenat пакет определяет набор таких команд (для введения точек переноса в различных знаках препинания).
вы можете
\newcommandкоманда, которая расширяется доmulti-discipli\-nary(используйте поиск + заменить все, чтобы заменить существующие слова).
проблема (как отметил Кеннитм) заключается в том, что LaTeX не будет переносить слова с тире в них. К счастью, есть стандартный пакет (часть ncctools), который решает эту самую проблему, называется
extdash. Это определяет новые команды дефиса и тире, которые не нарушают перенос и которые могут разрешать или предотвращать разрывы строк в дефисе/тире. Я предпочитаю использовать его сshortcutsопция, поэтому я могу использовать, например,\-/, а не\Hyphdash. Вот что ты скажешь хочу:
\usepackage[shortcuts]{extdash}...multi\-/disciplinaryчтобы предотвратить разрыв в этом дефисе, используйте
multi\=/disciplinary(в сторону: Чикагское руководство по стилю советует отбросить дефисы, прикрепляющие аффиксы, такие как "multi", если слово не является двусмысленным или непонятным без него.)
Я использую пакет
hyphenatа затем написать сложные слова, как финское слово интернет-yhteys (англ. интернет) какInternet\hyp yhteys. Выглядит глупо, но, кажется, это самый элегантный способ, который я нашел.
у меня была та же проблема. Я использую 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обратите внимание, что при этом используется пакет expl3 из latex3.
это делает
-активный символ, который сканирует вперед, чтобы увидеть, если за ним следует больше тире. Если это так, то он остается-, чтобы убедиться, что--и---продолжать работать. Если нет, то он становится\hypкоманда из дефиса, включающая разрывы слов в остальной части слова. Это общий решение, которое делает все слова, которые содержат явные дефисы дефис нормально.отметим, что
-становится макросом, который не полностью расширяется, поэтому попробуйте включить его после загрузки других пакетов, которые могут не ожидать-быть макросEdit: это моя вторая версия, первая версия была менее надежной, когда
{или}с последующим дефисом. Это не так, но в отличие от первой версии-в этой версии не полностью расширяемый.
multi\hskip0pt-\hskip0pt disciplinaryвы можете, например, определить как
\def\:{\hskip0pt}а потом пишите
multi\:-\:disciplinaryобратите внимание, что русский языковой пакет babel имеет свой собственный набор тире, которые не запрещают перенос,
"~(двойная цитата+Тильда) например.
multi-disciplinaryне будут перенесены, как пояснил kennytm. Ноmulti-\-disciplinaryимеет те же возможности переноса, что иmultidisciplinaryесть.Я признаю, что я не знаю, почему это работает. Это отличается от описанного поведения здесь (выделено мной):
команда
\-вставить дискреционный дефис в слово. это также становится единственной точкой, где перенос допускается в этом слове.
Я ответил что-то похожее здесь: латекс разбивает слишком много слов