\ignorespaces 在 \ul 内不起作用

\ignorespaces 在 \ul 内不起作用

我正在尝试编写一个文档模板,其中所需的文本将在开头设置\def,然后在文本中使用。我遇到了一个问题,如果原始宏中有空格,那么在包中使用它时\ulsoulutf8空格不会消失:

\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

您可以切换到 lualatex 并使用该lua-ul包:

% !TeX TS-program = lualatex 

\def\text{ some text }

\documentclass{article}
\usepackage{lua-ul}

\begin{document}
\def\textWithoutSpaces{\ignorespaces\text\unskip}

\textWithoutSpaces

\underLine{\textWithoutSpaces}
\end{document}

在此处输入图片描述

答案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,仅用于定义无参数宏。

相关内容