我在 Linux 上使用最新的 TeX Live。系统编码是 UTF-8。这也是我的 TeXstudio 2.12.8 中的默认编辑器编码。
我在类似的文件中有一些数字σ_1_μ_02_per_5.tikz
,并且我使用 将它们包括在内\input{}
。
现在,最有趣的部分是:它本来运行良好(即使没有inputenc
etc),然后就停止了。我没有更改文件中的一行。现在我得到了
Package inputenc Error:
Unicode character σ (U+3C3)(inputenc) not set up for use with LaTeX.
...σ_1_μ_02_per_5.tikz
我努力了:
- 使用
babel
inputenc
和utf8
,utf8x
,latin1
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}}
非常感谢。