在里面amsmath
包装文档中写道:
\newcommand{\n}[1]{$n$\nobreakdash-\hspace{0pt}}
最后一个例子显示了如何禁止连字符后的换行,但允许在下一个单词中进行正常连字符连接。(在连字符后添加一个零宽度空格即可。)
我认为这可以用来制作更通用的命令\nbhyphen
,\nbendash
就像这样:
\documentclass{minimal}
\usepackage{mathtools}
\newcommand{\nbhyphen}{\nobreakdash-\hspace{0pt}}
\newcommand{\nbendash}{\nobreakdash--\hspace{0pt}}
\begin{document}
Electron\nbhyphen electron interaction. Maxwell\nbendash{}Boltzmann distribution.
\end{document}
然后在我的文档中使用它们,而不是明确地写出破折号。
问题:
这是个好主意吗?它在任何地方都能用吗?还是会引发无法预料的问题?我应该在命令后加上空格吗?或者{}
?为什么这不是 LaTeX 中的默认行为?
答案1
为什么有些东西默认不可用是一个很难回答的问题。在这种情况下,谁愿意总是用这么长的命令来标记文档源?如果只担心少数人,那么这些命令最终将变得不那么有用。
然而,LaTeX 作为 Babel 语言界面的一部分提供了类似的东西,并且以一种使输入相当轻松的方式:所有支持"
Babel 速记的语言都有缩写,如"=
(复合词标记允许在其余部分使用连字符)和一堆其他缩写,如""
和,"-
并"~
定义了显式或隐式连字符的各种替代行为。
然而,它们都不是您真正想要的,原因在于在德语等语言中,复合词标记实际上是一个可取的断点(而不是禁止的断点)。
此外,这些简写只针对某些语言设置,通常是那些需要变音字符输入法的语言。因此,例如,对于英语,默认情况下没有设置任何内容。但你总是可以定义自己的简写,因此,为了使用(在我看来)有用的输入语法实现你想要的效果,你可以这样做
\documentclass{article}
\usepackage[english]{babel}
\useshorthands{"}
\defineshorthand{"=}{\mbox{-}\nobreak\hspace{0pt}}
\begin{document}
\fbox{\parbox{22mm}{Gutenberg-Universit\"at}}
\fbox{\parbox{22mm}{Gutenberg"=Universit\"at}}
\end{document}
这给你
答案2
一定要将它们放在宏中(但要记住另外两个宏名)。它们可能会在文本minipars
和captions
其他窄文本中产生不良输出。请参阅 MWE 以了解marginpar
问题。
\documentclass[11pt]{scrartcl}
\usepackage{mathtools,lipsum}
\newcommand{\nbhyphen}{\nobreakdash-\hspace{0pt}}
\newcommand{\nbendash}{\nobreakdash--\hspace{0pt}}
\usepackage{tikz}
\begin{document}
\marginpar{\raggedright Electron\nbhyphen electron interaction. Maxwell\nbendash{}Boltzmann distribution.}
\lipsum*[1]
\marginpar{\raggedright Electron-electron interaction. Maxwell--Boltzmann distribution.}
\lipsum*[1]
\end{document}
手稿完成后,我宁愿手动进行此类微修改。