这是我的设置。
我有一个主要的 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}
我有一个 Windows 批处理文件:
@echo off cls set /p name= "Name: " echo \def\name{%name%} %% ÅÄÖ >> name.tex REM generate pdf pdflatex.exe textTest.tex
并生成一个 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