我被迫url
在论文集论文中避免使用该软件包(!)但我的参考书目包含一个很长的 URL。我已经
\newcommand{\url}[1]{{\tttext{#1}}}
但 URL 溢出到边缘,因为它没有连字符。我不想手动更改参考书目来添加连字符(我当前的解决方案),而是定义新命令\url
以将命令放在\-
点和正斜杠之前。我见过一些相关问题,但对于我的 TeX 技能来说已经足够接近了……
另外,有没有办法可以在没有实际连字符的情况下实现连字符连接?
编辑:抱歉,我应该说,不仅url
不允许使用这个包……而且我不能包含任何额外的包。包含的包是
graphicx multicol footmisc amsmath amsfonts
所以我猜这是一个 plainTeX 问题。
答案1
如果没有任何软件包,你唯一的希望就是他们使用一个相当新的 TeX 发行版:
\newcommand{\url}[1]{%
\begingroup
\ttfamily
\begingroup\lccode`~=`/\lowercase{\endgroup\def~}{/\discretionary{}{}{}}%
\begingroup\lccode`~=`.\lowercase{\endgroup\def~}{.\discretionary{}{}{}}%
\catcode`/=\active\catcode`.=\active
\scantokens{#1\noexpand}%
\endgroup
}
这将允许句号和斜线后出现中断。
如果您的 URL 中包含一些特殊字符,我们可以处理它们,只需提供一些示例即可。
答案2
您可以采用以下解决方案使用回车符来中断 URL 的选项?界定\url
:
如果您喜欢在行尾使用破折号,则替换该行\discretionary{-}{}{}
:
但请注意,这可能会造成混淆,因为很难判断尾随的破折号是否是 URL 的一部分。如果要在线查看链接,则这不是问题,但对于打印版本,这可能是一个问题。
或者,如果您使用,那么您可以在行尾\discretionary{\usebox\MyArrowBox}{}{}
使用一个特殊字符(我使用了,但您可以调整它以使用任何其他符号)来指示连续的文本,以免与破折号混淆。\hookleftarrow
代码:
\documentclass{article}
\usepackage{hyphenat}
\usepackage{xstring}
\usepackage{forloop}
\newsavebox\MyArrowBox%
\sbox\MyArrowBox{$\hookleftarrow$}%
\makeatletter%
\newcommand*{\BreakableChar}{%
\leavevmode%
\prw@zbreak%
\discretionary{}{}{}%
%\discretionary{-}{}{}% If want a dash
%\discretionary{\usebox\MyArrowBox}{}{}%
\prw@zbreak%
}%
\newcounter{index}%
\newcommand{\url}[1]{%
\StrLen{#1 }[\stringLength]%
\forloop[1]{index}{1}{\value{index}<\stringLength}{%
\StrChar{#1}{\value{index}}[\currentLetter]%
{\currentLetter\BreakableChar}%
}%
}%
\newcommand*{\MyUrl}{https://tex.stackexchange.com/questions/50777/how-to-emulate-url-hyphenating-without-using-the-url-package}%
\begin{document}
\parbox{4cm}{\url{\MyUrl}}
\bigskip
\parbox{7cm}{\url{\MyUrl}}
\end{document}