删除单词之间的空格

删除单词之间的空格

有没有办法删除文本中单词之间的空格?比如

\RemoveSpaces{This is   my    sentence.}

将转换为

这就是我的句子。

答案1

\makeatletter
\def\RemoveSpaces#1{\zap@space#1 \@empty}
\makeatother

答案2

另一种确保单词之间连字符和换行正确的方法是

\newcommand{\RemoveSpaces}[1]{%
  \begingroup
  \spaceskip=1sp
  \xspaceskip=1sp
  #1%
  \endgroup}

这会将单词间距减小到最小可能的正值(人眼不可见),但段落仍会照常构建。完整示例:

\documentclass{article}
\usepackage[latin]{babel}
\usepackage{ragged2e}
\usepackage{lipsum}
\def\RemoveSpaces#1{%
  \begingroup
  \spaceskip1sp
  \xspaceskip1sp
  #1%
  \endgroup}

\begin{document}
\parbox{5cm}{\RaggedRight
\RemoveSpaces{\lipsum[2]}
}
\end{document}

在此处输入图片描述

答案3

解决lualatex方案全部段落中单词之间的空格。字距调整和自由调整不受影响。

\documentclass[english]{article}
\usepackage{babel,libertine,luacode,blindtext}
\begin{luacode*}
function rSpace(List)
 for line in node.traverse_id(0,List) do -- go through all lines
   for s in node.traverse_id(10,line.head) do node.remove(line.head,s) end 
 end 
 return List
end
\end{luacode*}
\begin{document}
\blindtext \par
\directlua{luatexbase.add_to_callback("post_linebreak_filter",rSpace,"rSpace")}
\blindtext \par

\end{document}

在此处输入图片描述

答案4

这可以处理参数中的宏,但不会从参数内的组中删除空格(如参数内的参数列表\RemoveSpaces

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{listofitems}
\newcommand\RemoveSpaces[1]{\setsepchar{ }\readlist\myarg{#1}\foreachitem\x\in\myarg{\x}}
\begin{document}
\RemoveSpaces{This is   my    sentence.}

\RemoveSpaces{This is   my  \detokenize{\  textit {italic}}  sentence.}
\end{document}

在此处输入图片描述

这是可以深入到论证中的组的版本。但是,伴随这一能力而来的限制是,论证现在必须是可扩展的。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{listofitems}
\newcommand\RemoveSpaces[1]%
  {\edef\tmp{#1}\setsepchar{ }\readlist\myarg{\tmp}\foreachitem\x\in\myarg{\x}}
\begin{document}
\RemoveSpaces{This is   my    sentence.}

\RemoveSpaces{This is   my  \detokenize{\  textit {italic}}  sentence.}
\end{document}

在此处输入图片描述

相关内容