我有一个main.tex
beamer 文件和一个子文件夹中的文件列表,例如:
subfolder/John1.tex
subfolder/John2.tex
subfolder/John3.tex
subfolder/Mike1.tex
subfolder/Mike2.tex
subfolder/Mike3.tex
subfolder/Mike4.tex
在我的中main.tex
,我还有一个 for 循环,如下所示:
\usepackage{pgffor}
\newcommand{\allByPerson}[3]{\foreach \c in {1,2,...,#3}{\input{#1/#2\c.tex}}}
以便
\input{subfolder/John1.tex}
\input{subfolder/John2.tex}
\input{subfolder/John3.tex}
应该产生相同的pdf
\allByPerson{subfolder}{John}{3}
问题是,尽管我已经\usepackage[utf8]{inputenc}
加载,但\allByPerson
命令产生了损坏的特殊字符(例如 ş 变成 7s)另一方面,当我\input
逐个执行它们时,没有出现这样的问题。
答案1
请注意,该问题仅影响pdflatex
,这肯定会让人相信该问题与编码有关。
我们从以下输入文件开始./John1.tex
(正如 OP 在评论中所建议的那样):
ç ğ ı ö ş ü
这是一个成功重现原始问题的 MWE,当\input
直接应用于时,它可以按预期工作John1.tex
,但是当它被包装在宏中时\allByPerson
,它会使输入文件的某些字符变得混乱。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgffor}
\newcommand{\allByPerson}[3]{\foreach \c in {1,...,#3}{\input{#1/#2\c.tex}}}
\begin{document}
\input{./John1.tex}
\allByPerson{.}{John}{1}
\end{document}
事实上,问题出现在带有变音符号的标记上,这些标记可以通过 在 pdflatex 中构建\c
,并且注意到pgffor
循环变量也被选为\c
引发了警告。
让我们将循环变量从 重命名\c
为\z
:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgffor}
\newcommand{\allByPerson}[3]{\foreach \z in {1,...,#3}{\input{#1/#2\z.tex}}}
\begin{document}
\input{./John1.tex}
\allByPerson{.}{John}{1}
\end{document}
只需将pgffor
循环变量从更改为\c
即可\z
解决问题。
课:不要在pgffor
循环中使用已定义的宏作为循环变量,尤其是当这些宏与字体编码相关时。