Tôi đã từng gặp vấn đề tương tự. Tôi sử dụng dấu gạch nối cộng với macro sau:
\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
Lưu ý rằng điều này sử dụng gói bùng nổ từ latex3.
Nó làm cho -
một ký tự hoạt động quét về phía trước để xem liệu nó có được theo sau bởi nhiều dấu gạch ngang hay không. Nếu vậy, nó vẫn là một -
, để đảm bảo --
và ---
tiếp tục hoạt động. Nếu không, nó sẽ trở thành\hyp
lệnh từ gạch nối, cho phép ngắt từ trong phần còn lại của từ. Đây là một giải pháp chung giúp tất cả các từ có chứa dấu gạch nối rõ ràng đều được gạch nối bình thường.
Lưu ý rằng nó -
sẽ trở thành một macro không thể mở rộng hoàn toàn, vì vậy hãy cố gắng đưa nó vào sau khi tải các gói khác mà có thể không mong đợi -
là macro
Chỉnh sửa: Đây là phiên bản thứ hai của tôi, phiên bản đầu tiên kém mạnh mẽ hơn khi có dấu gạch ngang {
hoặc }
theo sau. Cái này thì không, nhưng không giống như phiên bản đầu tiên, phiên bản -
này không thể mở rộng hoàn toàn.