我正在尝试删除一个较长的 URL,但似乎我只能将 URL 拆分开或将其删除,而不能同时进行。
我想做这样的事情:
\documentclass{文章} \usepackage{url} \usepackage{ulem} \sout{\url{http://tex.stackexchange.com}}
但它不会破坏网址
答案1
这url
通过递归地逐个字符地拆分输入、删除(在 中\ttfamily
)并应用\penalty0
以允许换行来模拟包。删除是对该包的修改censor
。
在此编辑的实现中,字符/
、-
和\_
可以用作换行点。(在本文末尾的原始实现中,参数中的任何字符\souturl
都可以用作换行点)
\documentclass{article}
\usepackage[nopar]{lipsum}
\usepackage{censor}
%%%%%%%%%%%
\censorruleheight=.1ex %THICKNESS OF CENSOR RULE
\newlength\nextcharwidth
\makeatletter
\renewcommand\@cenword[1]{%
\setlength{\nextcharwidth}{\widthof{#1}}%
\censorrule{\nextcharwidth}%
\kern -\nextcharwidth%
#1}
\makeatother
\newcommand\souturl[1]{\bgroup\ttfamily%
\censorruledepth=.55ex\souturlhelp#1\relax\relax\egroup}
\def\souturlhelp#1#2\relax{%
\censor{#1}%
\ifx#1/\penalty0\else%
\ifx#1-\penalty0\else%
\ifx#1\_\penalty0\else%
\fi\fi\fi%
\ifx\relax#2\relax\else\souturlhelp#2\relax\fi}
%%%%%%%%%%%
\begin{document}
\lipsum[1]
\souturl{%
http://tex.stackexchange.com/questions/224354/how-to-strike-out-an-url\_xyz%
}
\lipsum[2]
\end{document}
原始解决方案允许任何字符作为换行点
\documentclass{article}
\usepackage[nopar]{lipsum}
\usepackage{censor}
%%%%%%%%%%%
\censorruleheight=.1ex %THICKNESS OF CENSOR RULE
\newlength\nextcharwidth
\makeatletter
\renewcommand\@cenword[1]{%
\setlength{\nextcharwidth}{\widthof{#1}}%
\censorrule{\nextcharwidth}%
\kern -\nextcharwidth%
#1}
\makeatother
\newcommand\souturl[1]{\bgroup\ttfamily%
\censorruledepth=.55ex\soutrefhelp#1\relax\relax\egroup}
\def\soutrefhelp#1#2\relax{%
\censor{#1}\penalty0\ifx\relax#2\relax\else\soutrefhelp#2\relax\fi}
%%%%%%%%%%%
\begin{document}
\lipsum[1]
\souturl{%
http://tex.stackexchange.com/questions/224354/how-to-strike-out-an-url\_xyz%
}
\lipsum[2]
\end{document}