使用 \newcommand 宏实现线宽分布字母间距

使用 \newcommand 宏实现线宽分布字母间距

我正在使用该soul包来生成“分布式”文本。也就是说,文本会自动间隔开来,填满整行。这很好用,但现在我想做的是\newcommand在此上下文中使用,这样我就可以从源文件中删除冗余。

\documentclass{article}

\usepackage{soul}
\sodef\distribute{}{0pt plus 1fil}{0pt plus 2fil}{0pt}

\newcommand{\greeting}{Hello, World!}

\begin{document}
  \distribute{\greeting}
\end{document}

如果用文字替换\greeting\distribute则效果很好。但是,用\greeting会导致“重建失败”错误。soul文档说这是由于“分组连字符材料”或“泄漏字体开关”造成的。前者可以用 解决\mbox,但这会阻止字母间距的发生;后者对我来说意义不大,但我认为它不适用于此处。

有没有办法获取包含变量的线宽分布字母间距?


A类似问题回答是“使用microtype”。但是,这个包看起来相当低级,我不确定从哪里开始才能实现我的目标。

答案1

您可以使用 expl3 构造\exp_args,它在执行宏之前扩展参数。请参阅宏调用之前扩展参数例如。

梅威瑟:

\documentclass{article}
\usepackage{xparse}
\usepackage{soul}
\sodef\distribute{}{0pt plus 1fil}{0pt plus 2fil}{0pt}

\newcommand{\greeting}{Hello, World!}

\ExplSyntaxOn
\NewDocumentCommand{\expdistribute}{m}{%
\exp_args:No\distribute{#1}%
}
\ExplSyntaxOff

\begin{document}
\expdistribute{\greeting}

\distribute{Hello, World!}

\distribute{All your base are belong to us}
\end{document}

结果:

在此处输入图片描述

相关内容