Compilar subarchivos con xeCJK

Oct 27 2020

Cuando compilo un archivo principal main.texcon los subarchivos de paquetes y xeCJK, aparece el error Improper alphabetic constant. Funciona bien al compilar el subarchivo

Aquí se muestra main.tex(que no funciona):

\documentclass{article}
\usepackage{xeCJK}
\usepackage{subfiles}
\begin{document}
MAIN test
\subfile{sub.tex}
\end{document}

sub.tex (que funciona):

\documentclass[main.tex]{subfiles}
\begin{document}
SUB test
\end{document}

y una parte del archivo de registro main.log:

./sub.tex:2: Improper alphabetic constant.
<to be read again> 
                   \__xeCJK_ambiguous_char:n 
l.2 \begin{document}
                    
A one-character control sequence belongs after a ` mark.
So I'm essentially inserting \0 here.

La lista está debajo de las versiones de paquetes y XeTeX que uso.

  • subarchivos: 2.0
  • xeCJK: 3.8.6
  • XeTeX: 3.14159265-2.6-0.999992 (TeX Live 2020 / W32TeX)

Respuestas

2 UlrikeFischer Oct 27 2020 at 16:02

El problema es que xeCJK agrega código a uno de los ganchos del documento y como los subarchivos no vacían este gancho, el código se procesa dos veces y, en este caso, daña. Puede provocar un error similar con

\documentclass{article}
\usepackage{xeCJK}
\ExplSyntaxOn
\__xeCJK_patch_text_command:
\__xeCJK_patch_text_command:
\ExplSyntaxOff
\end{document}

La primera llamada al parche funciona, pero la segunda falla.

Se puede mostrar un error estructural similar con esto:

\begin{filecontents}{sub.tex}
\documentclass{subfiles}
\begin{document}
SUB test
\blub
\end{document}
\end{filecontents}

\documentclass{article}
\AddToHook{env/document/before}{\newcommand\blub{abc}}
\usepackage{subfiles}
\begin{document}
%\RemoveFromHook{env/document/before}[*]
MAIN test \blub
\subfile{sub.tex}
\end{document}

Al agregar \RemoveFromHook{env/document/before}[*], puede eliminar el código. Entonces funciona de nuevo. subfilesprobablemente debería hacer esto, antes de cargar un subarchivo.

Pero también xeCJKpodría evitar el problema usando \AddToHookNext{env/document/before}( \hook_gput_next_code:nn) en lugar de \AddToHookpara el código que debería ejecutarse solo una vez. O podría (que probablemente sea incluso mejor) usar el gancho begindocument / before en su lugar).

gernot Oct 28 2020 at 05:58

Con la versión 2020/10/24 v2.1del subfilespaquete, este problema está resuelto. Por el momento, esta versión aún no está en CTAN, sino solo en Github .