在 for 循环中输入文件列表会破坏特殊字符

在 for 循环中输入文件列表会破坏特殊字符

我有一个main.texbeamer 文件和一个子文件夹中的文件列表,例如:

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循环中使用已定义的宏作为循环变量,尤其是当这些宏与字体编码相关时。

相关内容