您可以使用 \unskip 在 \cite 或 \ref 前自动放置一个不间断空格吗?

您可以使用 \unskip 在 \cite 或 \ref 前自动放置一个不间断空格吗?

建议在、、内联数学之前以及其他几个位置放置一个不间断\cite空格\ref

问题是您是否可以设计一个改进的版本\cite(比如说),它将吞噬所有前面的空格,插入一个不间断的空格,然后继续调用原始版本\cite

答案1

是的,你可以。该varioref软件包已经实现了这一点。查看它的源代码。例如:

\@vpageref
    More parsing. . .
596 \def\@vpageref[#1]{\@ifnextchar[%
    The default for the second optional argument is a space which is prexed by
    \unskip to get rid of any leading space inserted already.
597 {\@@vpageref{#1}}{\@@vpageref{#1}[\unskip\vref@space]}}

您应该能够定义:

\def\mycite#1{\unskip~\cite{#1}}

或者\cite使用以下方法保存\let

\let\origcite\cite
\def\cite#1{\unskip~\origcite{#1}}

答案2

结合马丁的回答\cite答案的重新定义,我可以在序言中使用以下内容,而不需要该varioref包:

\let\originalcite\cite
\renewcommand{\cite}[1]{\unskip~\originalcite{#1}}

\let关于发生了什么的很好的解释\renewcommand是在制作您自己的 LaTeX 教程的样式部分

\let我们使用定义指向的指针的命令来干扰 LaTeX当前的另一个命令的定义;因此

\let\LaTeXtitle\title

定义 \LaTeXtitle 指向 的原始 LaTeX 定义\title。接下来是

\renewcommand{\title}[1]{\LaTeXtitle{\color{magenta}\textsf{#1}}}

定义一个新版本,将\title其颜色设为洋红色,并将其放入无衬线字体中。太棒了!

相关内容