!插入丢失的控制序列。\无法访问

!插入丢失的控制序列。\无法访问

尝试自己寻找解决方案,但没有找到任何确定的方法,我对 LaTeX 仍然不太擅长。我有运行良好的代码。

\documentclass[14pt]{extreport}
\usepackage[normalem]{ulem}

\newcommand\s{\nobreak \hskip\fill \allowbreak \space \hskip-\fill \relax}

\begin{document}
\hfill\begin{minipage}[t]{0.7\textwidth}
\begin{flushleft}
\obeyspaces\let =\s
Lorem:~\uline{ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\hfill}
\end{flushleft}
\end{minipage}
\end{document}

但在我尝试将\obeyspaces\let =\s命令移动到环境标头之后

\documentclass[14pt]{extreport}
\usepackage[normalem]{ulem}

\newcommand\s{\nobreak \hskip\fill \allowbreak \space \hskip-\fill \relax}

\newenvironment{under}
{\obeyspaces\let =\s}
{}

\begin{document}
\hfill\begin{minipage}[t]{0.7\textwidth}
\begin{flushleft}
\begin{under}
Lorem:~\uline{ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\hfill}
\end{under}
\end{flushleft}
\end{minipage}
\end{document} 

我收到错误

! Missing control sequence inserted. <inserted text> \inaccessible l.13 \begin{under}

我该如何修复它?

答案1

您必须在指令中使用活动空格

\let =\s

可以用这个\lowercase技巧来实现,参见\lowercase 技巧. 问题是

\newenvironment{under}
  {\obeyspace\let =\s}
  {}

在“扩展”代码中的空间不活动,因为在\obeyspaces之前执行\let。在中\newenvironment\obeyspaces仅存储,直到调用环境时才起作用。

\documentclass[14pt]{extreport}
\usepackage[normalem]{ulem}

\newcommand\spaceinunder{\nobreak \hskip\fill \allowbreak \space \hskip-\fill \relax}

\begingroup\lccode`~=` \lowercase{\endgroup
  \newenvironment{under}
  {\obeyspaces\let~=\spaceinunder}
  {}
}

\begin{document}
\hfill\begin{minipage}[t]{0.7\textwidth}
\begin{flushleft}
\begin{under}
Lorem:~\uline{ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\hfill}
\end{under}
\end{flushleft}
\end{minipage}
\end{document} 

在此处输入图片描述

也许更好的定义是:

\documentclass[14pt]{extreport}
\usepackage[normalem]{ulem}

\newcommand\spaceinunder{%
  \nobreak\hspace{\fill}\allowbreak\space\hspace{-\fill}\relax
}

\begingroup\lccode`~=` \lowercase{\endgroup
  \newenvironment{under}[1]
  {%
   \begin{flushright}
   \begin{minipage}[t]{#1}\raggedright
   \obeyspaces\let~=\spaceinunder
  }
  {\end{minipage}\end{flushright}}
}

\begin{document}
\begin{under}{0.7\textwidth}
Lorem:~\uline{ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\hfill}
\end{under}
\end{document} 

相关内容