LaTeX에서 대시가 포함 된 단어에 하이픈을 넣으려면 어떻게해야합니까?


107

내가 쓰고있는 LaTeX 문서 에서 줄 끝에서 렌더링되는 "multi-disciplinary"라는 단어 때문에 과도하게 가득 찬 hbox 경고를 받습니다 .

이 특정 경고를으로 변경하여 제거 할 수 multi-discipli\-nary있지만이 단어가 논문에서 많이 사용되기 때문에 다른 곳에서도 동일한 문제가 발생합니다.

\hyphenation{}대신 명령 을 사용하고 싶지만 \hyphenation{multi-disci-pli-na-ry}첫 번째 대시를 올바르게 이해하지 못하기 때문에 분명히 내 임시 가 작동하지 않습니다.

대시가 이미 포함 된 단어에서 올바른 들여 쓰기를 얻으려면 어떤 주문이 ​​필요합니까?

보너스 질문 : 내가 그 질문에 대한 답을 어디서 찾을 수 있었습니까?


딱딱한 하이픈에서 단어가 깨지는 것이 왜 문제입니까? "다중 \ 개행 차원"이 괜찮지 않습니까?
Geoff Reedy

1
보너스 답변 : "라텍스 하이픈 연결"에 대한 Google 검색은 답변이있는 라텍스 위키 책을 포함하여 모든 종류의 유용한 결과를 산출했습니다. en.wikibooks.org/wiki/LaTeX/Formatting#Hyphenation
Mica

3
@mica : 아니요. 나는 몇 년 전에 그 모든 페이지를 읽었습니다. @geoff : 실제로 라텍스가 하이픈을 사용했다면 괜찮을 것입니다. 그러나이 예에서는 "underfull hbox"가 발생하고 latex는 하이픈을 넣지 않도록 선택합니다.
Gyom 2010

\ hyphenation 명령에서 첫 번째를 백 슬래시 할 수 있습니까?
Brian Postow

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). 기본적으로 "있는 그대로"유지하고 Latex가 과도하게 가득 찬 hbox에 대해 불평 할 때 수동으로 명시적인 하이픈을 추가 할 것입니다.
Gyom 2010

63

문제 (KennyTM가 언급했듯이)는 LaTeX가 대시가있는 단어에 하이픈을 넣지 않는다는 것입니다. 다행히도이 문제를 해결하는 표준 패키지 (ncctools의 일부)가 extdash있습니다. 이것은 하이픈 연결을 방해하지 않고 하이픈 / 대시에서 줄 바꿈을 허용하거나 방지 할 수있는 새로운 하이픈 및 대시 명령을 정의합니다. 나는 그것을 사용하는 것을 선호 shortcuts내가 사용할 수 있도록, 예를 들어, 옵션 \-/보다는 \Hyphdash. 원하는 것은 다음과 같습니다.

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

해당 하이픈이 끊어지지 않도록하려면 multi\=/disciplinary

(참고 : Chicago Manual of Style 은 단어가 모호하거나 이해할 수없는 경우를 제외하고 '다중'과 같은 접미사를 붙인 하이픈을 삭제하도록 권장합니다.)


이것은 훌륭하지만 장 문자열에서 사용할 때 하이퍼 참조 경고를 생성합니다 Package hyperref Warning: Token not allowed in a PDF string. 다른 제안 된 솔루션 ( \def\hyph{-\penalty0\hskip0pt\relax})이 작동합니다.
Dr. Jan-Philip Gehrcke 2014-08-26

1
@ Jan-PhilipGehrcke : 이러한 경고는 \texorpdfstring(챕터 제목으로 들어가는 문자열에 대한 조건부 컴파일을 제공하는) 사용하여 수정할 수도 있습니다 . 시맨틱 매크로 내부의 사용을 숨 깁니다 (여기서는 아마도 \multidisciplinary). 예, 완벽하지 않습니다.
Blaisorblade

22

나는 패키지를 사용 hyphenat하고 핀란드어 Internet-yhteys (Eng. Internet connection )와 같은 복합어Internet\hyp yhteys. 구피처럼 보이지만 내가 찾은 가장 우아한 방법 인 것 같습니다.


6

multi-disciplinarykennytm에서 설명한대로 하이픈으로 연결되지 않습니다. 그러나 multi-\-disciplinary동일한 하이픈 연결 기회가 multidisciplinary있습니다.

나는 이것이 왜 작동하는지 모르겠다는 것을 인정합니다. 여기에 설명 된 동작과 다릅니다 (강조 표시).

이 명령 \-은 임의의 하이픈을 단어에 삽입합니다. 이것은 또한이 단어에서 하이픈이 허용되는 유일한 지점이 됩니다.


교체 -와 함께하는 -\-overleaf.com을의 기본 설정과 최소 출력을 변경하지 않습니다 (아마 pdflatex하지만, 종이의 뒷면은 실제로 말을하지 않습니다).
Camille Goudeseune 2018

4

나는 같은 문제가 있었다. 내가 사용 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하이픈 에서 명령이되어 나머지 단어에서 단어 분리를 활성화합니다. 이것은 명시적인 하이픈이 포함 된 모든 단어를 정상적으로 하이픈으로 연결하는 일반적인 솔루션입니다.

참고 -완전히 확장되지 않은 매크로가된다, 그래서 기대하지 않을 수 있습니다 다른 패키지를로드 한 후이 포함하려고 -매크로로를

편집 : 이것은 내 두 번째 버전이며 첫 번째 버전은 {또는 }하이픈 뒤에 올 때 덜 견고했습니다 . 이 -버전은 아니지만 첫 번째 버전과 달리이 버전은 완전히 확장 할 수 없습니다.


3
multi\hskip0pt-\hskip0pt disciplinary

예를 들어 다음과 같이 정의 할 수 있습니다.

\def\:{\hskip0pt}

다음 쓰기

multi\:-\:disciplinary

바벨 러시아어 패키지에는 하이픈을 금지하지 않는 자체 대시 세트 "~(예 : 큰 따옴표 + 물결표)가 있습니다.


1
이어야 multi-\hskip0pt disciplinary합니다. 당신의 MWE처럼 너무 많이 울릴 것입니다. 그것을 \setlength{\textwidth}{0.1cm}시도하기 위해 설정하십시오 .
LaRiFaRi

-3

나는 여기서 비슷한 대답을했습니다 : LaTeX가 너무 많은 단어를 깨뜨리는 것

나는 말했다:

프리앰블 어딘가에 하이픈 페널티를 설정해야합니다.

\hyphenpenalty=750

750의 값은 12pt 글꼴의 Letter 용지 (8.5x11 인치)에 2 열 레이아웃에 대한 필자의 요구에 적합했습니다. 필요에 맞게 값을 조정하십시오. 숫자가 높을수록 하이픈이 더 적게 발생합니다. hyphenatpackage를 살펴보고 싶을 수도 있습니다. 하이픈 페널티 이상의 기능을 제공합니다.


1
그는 한계를 정의하는 방법이 아니라 하이픈 연결을 피하는 방법을 묻습니다.
Andras Gyomrey 2013-08-27

-4

이미 하이픈으로 연결된 단어에 하이픈을 넣는 것을 피하기 위해 ~뒤로 공백과 함께 줄 바꿈없는 공백을 사용 했습니다 \!. 예를 들어, 명령

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

텍스트에 사용되는 경우 단어 3-D에서 하이픈 연결을 억제합니다. 아마도 최선의 해결책은 아니지만 그것은 나를 위해 일했습니다!


4
이것은 질문에 대한 반대 질문에 대한 대답입니다. 또한 귀하의 게시물을 수정하려고 시도한 사람이 말했듯이 귀하가 한 작업을 수행하는 훨씬 더 좋은 방법이 있습니다 \mbox{3-D}.
zwol 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.