Как заставить 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
есть.Я признаю, что я не знаю, почему это работает. Это отличается от описанного поведения здесь (выделено мной):
команда
\-
вставить дискреционный дефис в слово. это также становится единственной точкой, где перенос допускается в этом слове.
Я ответил что-то похожее здесь: латекс разбивает слишком много слов