从批次生成变音符号代码时的编码问题

从批次生成变音符号代码时的编码问题

这是我的设置。

  1. 我有一个主要的 tex 文件:

    % TextTest.tex
    \documentclass[a4paper,11pt]{article}
    \usepackage[utf8]{inputenc} % in order to be able to write åäö.
    \input{name.tex}
    \begin{document}
        Hello ÅÄÖ. \name
    \end{document}
    
  2. 我有一个 Windows 批处理文件:

    @echo off
    cls
    
    set /p name= "Name: "
    echo \def\name{%name%}  %% ÅÄÖ >> name.tex
    
    REM generate pdf 
    pdflatex.exe textTest.tex
    
  3. 并生成一个 tex 文件名 .tex。

但是,当名称包含例如 Ä 时,上述方法不起作用。我尝试过以下方法: - 在批处理文件中设置编码 CHCP 65001。 - 在批处理文件中设置编码 CHCP 1252。 - 使用 cmd.exe /U(unicode)和 /A(Ansi)启动批处理文件 - 以不同的编码保存 tex 文件。

答案1

这不是 latex 问题。您有一个批处理文件,其编码未知,您在 cmd 窗口中使用未知设置调用它,它写入一个编码未知的 name.tex。所有这些步骤都不受 TeX 系统的控制,您最好在其他网站上询问如何以合理的方式创建您的 name.tex。

如果您知道您的 name.tex 始终是例如 ansinew/latin1 编码,那么您可以在加载 tex 文件时暂时更改其中的输入编码:

\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc} % in order to be able to write åäö.
\inputencoding{ansinew}
\input{name-ansi.tex}
\inputencoding{utf8}
\begin{document}
    Hello ÅÄÖ. \name
\end{document}

然后,您必须在定义 \name 时扩展变音符号:

\makeatletter
\protected@edef\name{öäüÄÜz}
\makeatother

答案2

在批处理文件中进行此更改后,一切正常,使用 unicode 并像这样更改包含“名称变量”的回显

    @echo off
    REM ÅÄÖ
    chcp 65001

    cls
    set /p myName= "Name: "
    set "XX=\def\myName{%myName%}  %% ÅÄÖ"
    setlocal EnableDelayedExpansion 
    (
       echo !XX! 
    )   >> a.tex

    pdflatex.exe textTest.tex

相关内容