我正在尝试编写一个文档模板,其中所需的文本将在开头设置\def
,然后在文本中使用。我遇到了一个问题,如果原始宏中有空格,那么在包中使用它时\ul
,soulutf8
空格不会消失:
\def\text{ some text }
\documentclass{article}
\usepackage{soulutf8}
\begin{document}
\def\textWithoutSpaces{\ignorespaces\text\unskip}
\ul\textWithoutSpaces
\end{document}
我想要得到的:结果相当于\ul{some text}
我得到的结果是:结果相当于\ul{ some text }
如何修复此代码,使得参数的开头和结尾没有空格\ul
?
答案1
答案2
\ul
不喜欢\ignorespaces
。
我不会使用\ignorespaces
并定义对替换文本进行(受控)完全扩展\unskip
的变体。\newcommand
\documentclass{article}
\usepackage{soulutf8}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\trimspaces}{m}
{
\tl_trim_spaces:e { \text_expand:n { #1 } }
}
\cs_generate_variant:Nn \tl_trim_spaces:n { e }
\ExplSyntaxOff
\newcommand{\expnewcommand}{\ExpandArgs{ne}\newcommand}
\newcommand\mytext{ some text }
\expnewcommand\mytexttrimmed{\trimspaces{\mytext}}
\begin{document}
\ul\mytexttrimmed
\end{document}
这样,\mytexttrimmed
就定义为some text
没有前导或尾随空格(如果有的话)。
对于不太新的 TeX 发行版,将前言替换为
\ExplSyntaxOn
\NewExpandableDocumentCommand{\trimspaces}{m}
{
\tl_trim_spaces:e { \text_expand:n { #1 } }
}
\cs_generate_variant:Nn \tl_trim_spaces:n { e }
\NewDocumentcommand{\expnewcommand}{\exp_args:NNe\newcommand}
\ExplSyntaxOff
注意:\expnewcommand
不具备的全部功能\newcommand
,仅用于定义无参数宏。