命名 LaTeX 文件的最佳做法是什么?
.
我知道 R、Matlab 和 Java 在、_
、 、驼峰式大小写、大写等方面的使用都有所不同。-
人们通常用什么来命名 LaTeX 文件?这是否易于跨系统移植?
我记得在解释我的 Matlab 程序时遇到了一个大问题。原来是我以 Matlab 无法处理的方式命名了文件。为了避免将来出现此类问题,我只想开始使用最佳实践来命名我的 LaTeX 文件。
答案1
这在一定程度上取决于这些文件是否仅由您使用,以及您是否计划与其他人共享它们,例如,如果您在一个文档上使用它们,或者这些文件是 LaTeX 包的一部分。
但一般来说,我强烈建议你限制使用小写字母数字 ASCII 字符,即az、0-9 和-
。
原因如下:
- Unicode 或其他非 ASCII 字符在复制到具有不同代码页的不同文件系统时可能会造成麻烦。我遇到过甚至无法看Linux 安装的 Windows 共享上带有德语变音符号的文件。现在情况好多了,但仍然有风险。普通的 TeX 也不太喜欢非 ASCII 字符。
- 某些文件系统 (FS) 区分大小写(例如 *nix FS),而其他文件系统则不区分大小写(例如 FAT、NTFS)。如果将文件名全部保持小写,则可以避免文件之间的冲突,而这种冲突可能会导致在从区分大小写的 FS 复制到不区分大小写的 FS 时丢失数据。此外,当实际文件名的大小写与硬盘上的大写不同时,您会在区分大小写的系统上遇到麻烦。您可能没有意识到这一点,例如在 Windows 上,但它会在不同的 FS 上给您带来严重影响。
- TeX 中的特殊字符只要在此位置有效就会起作用,这排除了
%
和#
。其他 as&
也会引起麻烦,而且没有真正的理由使用它们,因此请避免使用它们。即使_
是常用的并且可以在内部工作的 ,\input
在需要打印文件名时也会引起麻烦,因此也请避免使用它。 - 文件名中的空格也是“邪恶的”,因为一些外部工具会将它们作为文件名分隔符。TeX 应该可以接受它们,除非它们连续使用多次。然后 TeX 会将它们合并为一个,然后再解释为文件名!
- 点会混淆 LaTeX 使用的简单扩展提取算法。请参阅这个问题举个例子。
我正在努力让软件包允许使用任意文件名。这是使用逐字模式完成的,但对于其他输入宏(如、或 )svn-multi
没有帮助。\input
\include
\includegraphics
答案2
建议您仅使用 ASCII 字母和一些标点符号;避免在文件名中使用空格、重音符号/Unicode 字母和多个句点。好的:
filename.tex
file-name.tex
FileName.tex
您可能会遇到以下问题:
file name.tex
file.name.tex
fîlénåmè.tex
(我会谨慎行事并避免、、、_
等等,但有时它们也会发挥很好的作用。这取决于情况!)*
&
%
#
答案3
严格来说,这不是你想要的答案,但这里有一个对我有用的技巧。在我所有的项目中,我都遵循一个非常严格的方案:
- 主文件被命名为
00.tex
,这使得它在目录列表中首先显示。 - 这个主文件输入了
000.tex
所有的定义,包等。 - 摘要存放在名为
abstract.tex
- 介绍在名为的文件中
introduction.tex
(我放弃了与 8.3 操作系统的可比性) - 轮廓保持在
00.tex
- 最后/结论/讨论部分放在名为
zz.tex
- 所有其他部分都放在名称为单个小写英文单词的文件中。(这让不太智能的拼写检查器更容易检查)。如果更改了部分名称,则包含它的文件的名称将不是改变。
现在,主文件已设置为显示文档结构,而不显示其他任何内容,例如,
\documentclass{article}
\input{000}
\author{U. K. Owen}
\title{Ten Little Darker Skin Human Beings}
\begin{document}
\maketitle
\begin{abstract}
\input{abstract}
\end{abstract}
\section{Introduction}
\input{introduction}
\paragraph{Outline} The remainder of this manuscript is organized as follows.
Section~\ref{Section:defs} makes some definitions.
The results are presented in Section~\ref{Section:results}.
Section~\ref{final} concludes.
\section{Definitions}
\label{Section:defs}
\input{definitions}
\section{Results}
\label{Section:results}
\input{results}
\section{Conclusions, Discussion, and Further Research}
\label{Section:final}
\input{zz}
\end{document}
按照这种方案,可以释放那些忙于文件命名问题的神经元,以处理真正重要的事情。
答案4
Will 列出的规则很好;以下是一些技术补充:
- 所有现代操作系统和文件系统都可以处理文件名中的任意 Unicode 字符。
- 操作系统有时区分大小写,有时不区分大小写;但现代操作系统始终保留大小写。这意味着,如果您请求名为 的文件,
A
您可能会得到名为A
或 的文件a
,但如果您创建一个名为 的新文件A
,则永远不会得到名为 的文件a
。 - 操作系统有时会保持规范化,有时则不会。
- 大多数 TeX 引擎都可以处理任意输入文件名,只要能从
\jobname
中构造一个有效的文件名即可;但是,没有正式的定义,因此如果您想保持可移植性,最好坚持使用已知有效的方法。 - 二级文件的名称(例如,由
\input
或包含\includegraphics
)带有空格或多个空格通常会导致问题,因为 LaTeX 内核和软件包假定每个文件名中没有空格,最多只有一个点。诸如 之类的软件包grffile
修复了一些问题。