防止 xspace 在行首插入空格

防止 xspace 在行首插入空格

短的:有没有办法防止\xspace在行首插入空格?

长的:我已定义了几个用于普通文本的格式化宏。其中一个(\indoubt)通常用于文本内部插入注释。在正常上下文中,前一个单词和此宏的输出之间应该只有一个空格,因此我\unskip\xspace在此宏的开头使用了。但是,我还想显示文档中实际使用的所有格式化宏的列表 - 使用相同的宏输出一些示例文本。(我可以手动编写此文本而不使用\xspace,但这样做很容易出错,因为如果我更改宏中的格式,我必须记住更改示例文本。)在此列表中,\xspace就在行的开头。有没有办法从此处删除它?

以下是 MWE:

\documentclass{article}

\usepackage{xspace}
\usepackage{xifthen}
\usepackage{etoolbox}

\makeatletter
\newcommand\addmacro[1]{%
    \write\@auxout{\noexpand\@writefile{macros}{#1\newline}}%
}
\newcommand\printmacros{%
    \section*{Meaning of formats}%
    \@starttoc{macros}%
}
\makeatother

% Once a formatting macro has been used, set the corresponding flag to TRUE
% and write self-formatted explanation to legend
\newcommand{\checkflag}[2]{%
    \providebool{flag#1}%
    \ifbool{flag#1}
        {}
        {\global\booltrue{flag#1}%
         \addmacro{#2}%
        }%
}

% Express doubt if unsure about a word in the text
\newcommand{\indoubt}[1]{%
    \checkflag{indoubt}{\protect\indoubt{Macro with leading xspace}}%
    \ifthenelse{\equal{#1}{}}
        {\unskip{\textbf{\xspace[?]\xspace}}}
        {\unskip{\textbf{\xspace[#1]\xspace}}}%
    }

\newcommand{\simple}[1]{%
    \checkflag{simple}{\simple{Just a plain formatting directive.}}%
    \textsc{#1\xspace}%
}

\setlength{\parindent}{0pt}

\begin{document}
\printmacros
\section{Test}
This is some textt\indoubt{Wrong spelling?}~\dots \simple{More text.}
\end{document}

答案1

即使\xspace你决定忽略它的缺点 是在没有参数的命令后面添加空格(如果命令后面没有标点符号)。

带参数的命令根本没用,因为

 blah blah \foo{argument} blah

之后的空格\foo{argument}与之后的空格不同,\foo它只是一个普通的空格,并且在输出中不经特殊处理即可出现。

在定义的最后一个标记以外的任何地方使用该\xspace命令都不会产生任何有用的效果,因为在这种情况下,您总是知道下一个标记是什么,因此 xspace 所做的前瞻和测试毫无用处。{\xspace[...只是一种缓慢的方法{ [...

我不太确定你想要什么,但也许

\documentclass{article}

\usepackage{xifthen}
\usepackage{etoolbox}

\makeatletter
\newcommand\addmacro[1]{%
    \write\@auxout{\noexpand\@writefile{macros}{#1\par}}%\newline is badness10000 "infinitely bad"
}
\newcommand\printmacros{%
    \section*{Meaning of formats}%
    \@starttoc{macros}%
}
\makeatother

% Once a formatting macro has been used, set the corresponding flag to TRUE
% and write self-formatted explanation to legend
\newcommand{\checkflag}[2]{%
    \providebool{flag#1}%
    \ifbool{flag#1}%
        {}%
        {\global\booltrue{flag#1}%
         \addmacro{#2}%
        }%
}

% Express doubt if unsure about a word in the text
\newcommand{\indoubt}[1]{%
    \ifhmode\unskip\space\fi
    \checkflag{indoubt}{\protect\indoubt{Macro with leading xspace}}%
    \ifthenelse{\equal{#1}{}}%
        {\textbf{[?]}}%
        {\textbf{[#1]}}%
    }

\newcommand{\simple}[1]{%
    \checkflag{simple}{\simple{Just a plain formatting directive.}}%
    \textsc{#1}%
}

\setlength{\parindent}{0pt}

\begin{document}
\printmacros
\section{Test}
This is some textt\indoubt{Wrong spelling?}~\dots \simple{More text.}
\end{document}

相关内容