如何让 LaTeX 像 Word 一样自动添加标点符号

如何让 LaTeX 像 Word 一样自动添加标点符号

使用 LaTeX 时,有些事情让我很困扰。例如,如果使用 Word,它会自动将每个句子开头的首字母大写,并建议使用其他标点符号等。

此时,是否有任何可用于解决此问题的 LaTeX 工具或软件包?

答案1

这是一个误解:LaTeX 不会帮助你编写文本,这是编辑。我非常有信心,这样的事情(在点后将每个首字母大写)可以用 emacs 或 vim 实现。

Word 集编辑器、排版机、电子表格等功能于一体,但却没有发挥出什么真正出色的功能(好吧,数百万人不同意)。

作为替代解决方案,您可以使用 Word 作为编辑器:

将文件另存为.txtlatexmk在后台编译。免责声明:我自己没有尝试过;这是一个非常奇怪的想法。

答案2

这不是一个解决方案,而是一个较长的评论:

对于某些人来说,某些文字处理器的自动大写功能是一个“错误”,而不是“功能”。正如 Gonzalo Medina 所指出的那样。原因是在实践中存在许多例外,并且监督/纠正每个自动决定非常令人分心。就我而言,总的来说,我讨厌写出正确的缩写物种名称(例如,智人等),然后意识到愚蠢的计算机写了人类(当然,只有在高质量论文中印刷“最终”版本后)。这似乎并不重要,但看起来作者不知道物种二名法的基本规则。在高水平的科学期刊上,你的文章可能只会因为这个错误而被拒绝。

另一方面,正如 Ryan 指出的那样,这个问题只与编辑器有关。Tex 引擎是 WYWIWIP 程序(您所写即我打印),而不是 WYMIWIR(您所想即我呈现)。那么 LaTeX 编译器的主要目的不是pdflatex生成源代码,而是以纯文本形式读取它(使用任何其他程序生成)。因此,某些源代码(您的序言,或您的自定义类或包)必须说明要做什么。

考虑是否要把这项工作留给 LaTeX。在编辑器方面,问题只是这是否证明过度使用软件是合理的。使用 LaTeX,只需考虑点字符。将.活动字符设为&不是一个选项,因为句子结尾(句号)、段落结尾(后面没有空格 + 某些字符)、大写字母内的缩写(J. Smith)或非大写字母(No. 3)、小数(3.14)、省略号等都有相同的符号。测试每个案例?祝你好运。即使使用 LaTeX 3 或其他任何软件都可以,我只希望代码会严重过载、脆弱且不兼容。

然后,自然的 LaTeX 选项,至少对于没有深入了解 TeX 核心内容的用户(即我)来说,将用一些奇怪的宏替换句子末尾的句号,就像一个句号,替换空格后的下一个字符,而不触及缩写的句号、段落末尾等。一种简单的方法:

\documentclass{minimal}
\def\¶{. \MakeUppercase}
\begin{document}
This is a test\¶ this is a test.
\end{document}

该 MWE 产生:

This is a test. This is a test.

使用 newunicodechar包你甚至可以只转换或一些其他非 ASCII 字符:

\documentclass{minimal}
\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}
\newunicodechar{¶}{. \MakeUppercase}
\begin{document}
This is a test¶ this is a test.
\end{document}

但没那么简单。尝试使用¶{\em this}¶\emph{this}MWE 中的简单构造。

无论如何,主要的缺点不是这个,而是因为可以轻松手动完成的小修复而牺牲了可读性和易写性。

答案3

实际上,您可以通过激活并重新定义它来将新句子的开头大写,.首先测试句号后面是否有空格,然后在发现空格时执行\ucmacro(原始的宏版本\uppercase),如果不是空格则打印发现的内容:

\documentclass{article}

\begin{document}
\let\period=.
\catcode`\.=13%\active
\catcode`\@=11%letter
\def.{\period\afterassignment\@period\let\next= }
\def\@period{%
  \if\noexpand\next\@sptoken
    \next\expandafter\ucmacro
  \else
    \expandafter\next
  \fi
}
\def\ucmacro#1{\uppercase{#1}}
\catcode`\@=12%other

zzzzzzzz. capitalize this.but not this.
\end{document}

特别提到@egreg 的回答\let\foo\bar 与 \let\foo=\bar

输出

相关内容