包灵魂用宏文本下划线问题

包灵魂用宏文本下划线问题

过去几年我一直在慢慢学习 LaTeX。这些努力基本都取得了成功。

最近,我偶然发现了一个问题,我知道修复起来可能很简单,但它却让我困惑。我想,它与宏扩展有关。这些宏扩展问题无疑是我剩下的最大问题之一。

寻求有关以下问题的任何意见。我尝试了\expandafter\edef等的各种组合,但显然我只是随机地摸索着。

我已经看到了一些相关的问题,但是它们似乎都在尝试做一些略有不同的事情,而且这些建议似乎对我的情况没有帮助。

MWE 提供:

\documentclass[10pt]{article}

\usepackage{soul}

\def\qwerty{happy new year}

\begin{document}

\ul{happy new year}
\ul{\qwerty}

\end{document}

错误如下:

! Package soul Error: Reconstruction failed.

See the soul package documentation for explanation.
Type H <return> for immediate help.
 ...

l.10 \ul{\qwerty}

我知道解决方案很简单。任何能为我指明方向并有助于我理解问题和解决方案的信息都将不胜感激。

答案1

在此处输入图片描述

\documentclass[10pt]{article}

\usepackage{soul}

\def\qwerty{happy new year}

\begin{document}

\ul{happy new year}
\expandafter\ul\expandafter{\qwerty}

\end{document}

答案2

您可以通过删除括号来让灵魂扩展:

\documentclass[10pt]{article}

\usepackage{soul}

\def\qwerty{happy new year}

\begin{document}

\ul{happy new year}
\ul\qwerty

\end{document}

在此处输入图片描述

答案3

如果您没有\expanded原语并且参数完全可扩展(但您不知道需要进行多少次扩展),则可以使用\edef临时宏:

\documentclass[]{article}

\usepackage{soul}

\makeatletter
\newcommand\edefexp[2]
  {%
    \begingroup
      \edef\edefexp@tmp{#2}%
      \expandafter
    \endgroup
    \expandafter\edefexp@aux\expandafter{\edefexp@tmp}{#1}%
  }
\newcommand\edefexp@aux[2]
  {%
    #2{#1}%
  }
\makeatother

\newcommand\qwerty{happy new \qwertz}
\newcommand\qwertz{year}

\begin{document}
\edefexp\ul{\qwerty}
\end{document}

相关内容