尝试自己寻找解决方案,但没有找到任何确定的方法,我对 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}