我正在编写一个命令来处理细菌名称。它们第一次写完整,然后只写第一个名称和后面的句号。我通过拼凑其他人的例子来管理我所拥有的,尽管我似乎有一个多余的空间。我现在忽略了有时第二个名字也会被缩短。
平均能量损失
\documentclass[letterpaper,10pt]{scrartcl}
\usepackage{etoolbox}
\def\splitfirstchar#1#2\sentinel{#1.}
\newcommand{\first}[1]{\splitfirstchar#1\sentinel}
\def\testwords#1{%
\readwords#1\relax
}
\def\readwords#1 #2\relax{%
\ifcsundef{bactused}{
\def\bactused{true}%want full name
\textit{#1 #2}
}{
\textit{\first{#1} #2}
}
%\relax
}
\def\ecoli{\testwords{Escherichia coli}}
\begin{document}
\ecoli
\ecoli\ecoli. Blah
\end{document}
生成:
那么额外的空间来自哪里呢?
答案1
你需要%
在包含以下内容的行的末尾\textit{...}
以及以以下内容结尾的行{
答案2
TeX 将 视为<return>
空格,就像它将多个连续空格视为空格一样。因此,在您的例子中,每次使用 之后实际上都会有一个返回\ecoli
。%
这会“删除”这个<return>
。
来自TeX 书关于 AU Thor 的短篇小说(第6 运行 TeX,第 26 页):
这里的符号
%
是我们之前没有讨论过的纯 TeX 的一个特性:它有效地终止了输入文件的一行,而不会引入 TeX 在移动到下一行输入时通常会插入的空格。此外,TeX 会忽略您在%
文件中 , 之后输入的所有内容,直到该行的末尾;因此,您可以将注释放入手稿中,并且知道注释仅供您查看。