我目前正在使用模板动态创建 LaTeX 文档,而我使用循环创建一个包含一个或多个单词的句子。这个句子的模板是He said: "<%words%>."
。
结尾句号和引号已经存在。我只需填写单词,替换即可<%words%>
。
因此我最终可能会得到如下文本:He said: " word1 word2 ."
这是不合标准的,因为空格确实出现并且很丑陋。
我想避免第一个引号之后和结束句号之前的空格。
请假设我无法修复动态添加单词时的问题。它必须在 LaTeX 中修复。我希望 LaTeX 能够处理空格。我认为这可以工作:"{}word1{}word2{}."
但事实并非如此。也许我误解了 的用法{}
。
我也认为这可行:"\xspace{}word1\xspace{}word2\xspace{}."
,但事实并非如此。
以上两个都将单词粘在一起,单词之前、之间或之后都没有空格。
底线是,不要让你与模板混淆:我想让 LaTeX 处理间距(正如它所做的那样并且应该如此),而我自己只指示单词边界:例如He said: "{}word1{}word2{}."
呈现为He said: "word1 word2."
。
这是一个测试:
\documentclass{article}
\usepackage{xspace}
\begin{document}
He said: "{}word1{}word2{}."
He said: "\xspace{}word1\xspace{}word2\xspace{}."
\end{document}
顺便说一句,如果可能的话,我真的需要它与 xelatex 一起工作。
编辑:抱歉,我认为我的例子太简单了,无法传达复杂性。问题是我需要不断动态地将word1
,添加word2
到我的句子中。这些 (word1, word2) 可能只是单词或控制+单词,例如\emph{a b c}
或\href{url}{caption}
。
其次,无法知道后面跟着的word2
是标点符号(没有空格可添加)还是另一个单词(因此需要添加空格)。
抱歉如果我造成混淆。
答案1
答案2
如果您的模板能够\corrspaces
在第一个之前添加控制序列"
,即它看起来像He said: \corrspaces"<%words%>."
,那么以下宏可以解决您的问题:
\def\corrspaces"#1#2."{``\removelastspace#1#2\end/ \end/\fin{#1#2}.''}
\def\removelastspace #1 \end/#2\fin#3{\ifx^#2^#3\else#1\fi}
He said (1): \corrspaces" word1 word2 ."
He said (2): \corrspaces"word1 word2 ."
He said (3): \corrspaces" word1 word2."
He said (4): \corrspaces"word1 word2."
所有四个示例都打印相同的结果:“word1 word2”。