下面是显示错误的最小工作示例:
\documentclass[a4paper,12pt,openany]{book}
\usepackage{alltt}
\begin{document}
\begin{alltt}
\pageref{asd fgh jkl}
\end{alltt}
\end{document}
我期望输出是
??
相反,我得到的是
?? fgh jkl
只要参数中没有空格,\pageref 就可以正常工作。如果有空格,则除第一个单词之外的所有单词也会输出。我该如何防止这种情况发生?谢谢。
答案1
这是标签中不使用空格的另一个好理由。但是,强制使用“真实空格”是可行的:
\documentclass[a4paper,12pt,openany]{book}
\usepackage{alltt}
\begin{document}
\begin{alltt}
\pageref{asd\string fgh\string jkl}
\end{alltt}
\label{asd fgh jkl}
\end{document}
替代方法:
\documentclass[a4paper,12pt,openany]{book}
\usepackage{alltt}
\newcommand{\ttpageref}{\begingroup\catcode`\ =10 \ttpagerefaux}
\newcommand{\ttpagerefaux}[1]{\pageref{#1}\endgroup}
\begin{document}
\begin{alltt}
\ttpageref{asd fgh jkl}
\end{alltt}
\label{asd fgh jkl}
\end{document}
您也可以\pageref
直接使用,但设置更复杂:
\documentclass[a4paper,12pt,openany]{book}
\usepackage{alltt}
\let\latexpageref\pageref
\newcommand{\ttpageref}{\begingroup\catcode`\ =10 \ttpagerefaux}
\newcommand{\ttpagerefaux}[1]{\latexpageref{#1}\endgroup}
\usepackage{etoolbox}
\AtBeginEnvironment{alltt}{\let\pageref\ttpageref}
\begin{document}
\begin{alltt}
\pageref{asd fgh jkl}
\end{alltt}
\label{asd fgh jkl}
\end{document}
答案2
您可能不仅会得到所述的输出,还会得到错误
! Missing \endcsname inserted.
避免这种情况的最简单方法是将引用隐藏在临时宏中,或者如果你愿意,你可以使用\string
\documentclass[a4paper,12pt,openany]{book}
\usepackage{alltt}
\begin{document}
\label{asd fgh jkl}
\def\foo{\pageref{asd fgh jkl}}
\begin{alltt}
\foo
\pageref{asd\string fgh\string jkl}
\end{alltt}
\end{document}