如何 \input{} 具有 Unicode 名称的文件?

如何 \input{} 具有 Unicode 名称的文件?

我在 Linux 上使用最新的 TeX Live。系统编码是 UTF-8。这也是我的 TeXstudio 2.12.8 中的默认编辑器编码。

我在类似的文件中有一些数字σ_1_μ_02_per_5.tikz,并且我使用 将它们包括在内\input{}

现在,最有趣的部分是:它本来运行良好(即使没有inputencetc),然后就停止了。我没有更改文件中的一行。现在我得到了

Package inputenc Error: 
Unicode character σ (U+3C3)(inputenc) not set up for use with LaTeX.
...σ_1_μ_02_per_5.tikz

我努力了:

  • 使用babel
  • inputencutf8utf8xlatin1
  • fontenc使用不同的参数
  • 在其他编辑器中以 UTF-8 格式打开和保存

在这种情况下,我得到:

Undefined control sequence. ...μ_02_per_5.tikz}
Missing $ inserted. ...μ_02_per_5.tikz}
Double subscript. ...μ_02_per_5.tikz}
Undefined control sequence. ...μ_02_per_5.tikz}

如何解决这个问题?


最小不起作用的示例:

\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\begin{document}
    \input{1.tex}
    \input{σ.tex}
\end{document}

答案1

如果您使用inputenc允许使用输入中的字符来排版文本,则此类文件名从未起作用。以前,如果您使用旧的默认原始 8 位默认输入,则字节刚刚通过,然后被文件系统解释为 UTF-8,则它本来可以正常工作

在当前的 LaTeX 版本中,默认采用 inputenc UTF-8 处理。

正如艾伦上面评论的那样,你可以使用

\input{\detokenize{σ.tex}}

即使在加载了 UTF-8 输入处理之后也允许使用文件名。

希望在未来的版本中它\detokenize不再是必需的,但它将始终起作用。

答案2

我使用make4ht一个源文件输入另一个源,该源的文件名包含一些 utf-8 字符:

\input{scénario1}

如果我只使用 XeLaTeX 编译器,它就可以工作。但如果我通过 make4ht 命令使用它,

make4ht -c ../make4ht.cfg --xetex -d html main.tex "Gin-percent"

那么它就会失败。

错误是:

! Missing endcsname inserted.
<to be read again> 
                   special 
l.20 \input{scénario1}
                      
The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

! Use of ??? doesn't match its definition.
<argument> ???  
                ! LaTeX Error: special invalid in file name. Lost: {t4ht@+&{...
l.20 \input{scénario1}
                      
If you say, e.g., `\def\a1{...}', then you must always
put `1' after `\a', since control sequence names are
made up of letters only. The macro here has not been
followed by the required stuff, so I'm ignoring it.

! Missing endcsname inserted.
<to be read again> 
                   special 

使用 David Carlisle (@david-carlisle) 提供的上述解决方案,它可以工作:

\input{\detokenize{scénario1}}

非常感谢。

相关内容