从下面的最小工作示例中可以看出,\MakeUppercase
使用 pdfLatex 编译时,命令会保留转换后的大写单词的重音符号,尽管它不应该保留。使用 Lualatex 或 Xelatex 编译时可以正常工作。使用 pdfLatex 时如何修复此问题?
MWE1:pdfLaTeX
\documentclass[12pt]{article}
\usepackage{calc}
\usepackage[a4paper, total={180mm,247mm},left=15mm,top=20mm]{geometry}
\usepackage{gfsartemisia}
\usepackage[T1,LGR]{fontenc}
\usepackage[english, greek]{babel}
\begin{document}
Πρόταση για έλεγχο των τόνων στα κεφαλαία
\MakeUppercase{Πρόταση για έλεγχο των τόνων στα κεφαλαία}
\end{document}
pdfLatex 的输出:
但是如果使用 LuaLatex(或 XeLatex)编译“几乎”相同的代码,就可以正常工作:大写单词中没有重音符号:
MWE2: LuaLaTeX
% !TeX program = lualatex
\documentclass[12pt]{article}
\usepackage{calc}
\usepackage[a4paper, total={180mm,247mm},left=15mm,top=20mm]{geometry}
\usepackage[no-math]{fontspec}
\defaultfontfeatures{Scale=MatchLowercase, Script=Greek}\defaultfontfeatures[\rmfamily]{Scale=1.1}
\setmainfont{GFS Artemisia}
\usepackage[english, greek]{babel}
\begin{document}
Πρόταση για έλεγχο των τόνων στα κεφαλαία
\MakeUppercase{Πρόταση για έλεγχο των τόνων στα κεφαλαία}
\end{document}
LuaLatex 的输出:
答案1
下一次expl3
更新将解决这个问题:参见https://github.com/latex3/latex3/commit/2b91cfa676bf2a99fbfab63537b9e0bdcb612880了解代码细节。该方法是使用一种简化的方法来删除重音符号,基于xgreek
包所使用的方法:使用 8 位引擎,实现完整的 Unicode 算法极具挑战性。未来的 LaTeX 版本可能会自动启用基于的希腊语支持babel
,但目前即使在expl3
代码发布后您也需要指定这一点。无需更新即可演示两个部分:
\documentclass{article}
\usepackage[LGR]{fontenc}
\usepackage[english, greek]{babel}
\ExplSyntaxOn
\DeclareDocumentCommand \MakeUppercase { o m }
{
\IfNoValueTF {#1}
{ \text_uppercase:n {#2} }
{ \text_uppercase:nn {#1} {#2} }
}
\group_begin:
\bool_lazy_or:nnF
{ \sys_if_engine_luatex_p: }
{ \sys_if_engine_xetex_p: }
{
\cs_set_protected:Npn \__text_loop:nn #1#2
{
\quark_if_recursion_tail_stop:n {#1}
\use:x
{
\__text_tmp:w
\char_to_utfviii_bytes:n { "#1 }
\char_to_utfviii_bytes:n { "#2 }
}
\__text_loop:nn
}
\cs_set_protected:Npn \__text_tmp:w #1#2#3#4#5#6#7#8
{
\tl_const:cx
{
c__text_uppercase_el_
\char_generate:nn {#1} { 12 }
\char_generate:nn {#2} { 12 }
_tl
}
{
\exp_after:wN \exp_after:wN \exp_after:wN
\exp_not:N \char_generate:nn {#5} { 13 }
\exp_after:wN \exp_after:wN \exp_after:wN
\exp_not:N \char_generate:nn {#6} { 13 }
}
}
\__text_loop:nn
{ 0370 } { 0370 }
{ 0371 } { 0370 }
{ 0372 } { 0372 }
{ 0373 } { 0372 }
{ 0376 } { 0376 }
{ 0377 } { 0376 }
{ 03FD } { 03FD }
{ 037B } { 03FD }
{ 03FE } { 03FE }
{ 037C } { 03FE }
{ 03FF } { 03FF }
{ 037D } { 03FF }
{ 0386 } { 0391 }
{ 0388 } { 0395 }
{ 0389 } { 0397 }
{ 038A } { 0399 }
{ 038C } { 039F }
{ 038E } { 03A5 }
{ 038F } { 03A9 }
{ 0390 } { 03AA }
{ 0391 } { 0391 }
{ 0392 } { 0392 }
{ 0393 } { 0393 }
{ 0394 } { 0394 }
{ 0395 } { 0395 }
{ 0396 } { 0396 }
{ 0397 } { 0397 }
{ 0398 } { 0398 }
{ 0399 } { 0399 }
{ 039A } { 039A }
{ 039B } { 039B }
{ 039C } { 039C }
{ 039D } { 039D }
{ 039E } { 039E }
{ 039F } { 039F }
{ 03A0 } { 03A0 }
{ 03A1 } { 03A1 }
{ 03A3 } { 03A3 }
{ 03A4 } { 03A4 }
{ 03A5 } { 03A5 }
{ 03A6 } { 03A6 }
{ 03A7 } { 03A7 }
{ 03A8 } { 03A8 }
{ 03A9 } { 03A9 }
{ 03AA } { 03AA }
{ 03AB } { 03AB }
{ 03AC } { 0391 }
{ 03AD } { 0395 }
{ 03AE } { 0397 }
{ 03AF } { 0399 }
{ 03B0 } { 03AB }
{ 03B1 } { 0391 }
{ 03B2 } { 0392 }
{ 03B3 } { 0393 }
{ 03B4 } { 0394 }
{ 03B5 } { 0395 }
{ 03B6 } { 0396 }
{ 03B7 } { 0397 }
{ 03B8 } { 0398 }
{ 03B9 } { 0399 }
{ 03BA } { 039A }
{ 03BB } { 039B }
{ 03BC } { 039C }
{ 03BD } { 039D }
{ 03BE } { 039E }
{ 03BF } { 039F }
{ 03C0 } { 03A0 }
{ 03C1 } { 03A1 }
{ 03C2 } { 03A3 }
{ 03C3 } { 03A3 }
{ 03C4 } { 03A4 }
{ 03C5 } { 03A5 }
{ 03C6 } { 03A6 }
{ 03C7 } { 03A7 }
{ 03C8 } { 03A8 }
{ 03C9 } { 03A9 }
{ 03CA } { 03AA }
{ 03CB } { 03AB }
{ 03CC } { 039F }
{ 03CD } { 03A5 }
{ 03CE } { 03A9 }
{ 03D0 } { 0392 }
{ 03D1 } { 0398 }
{ 03D2 } { 03A5 }
{ 03D3 } { 03A5 }
{ 03D4 } { 03AB }
{ 03D5 } { 03A6 }
{ 03D6 } { 03A0 }
{ 03DA } { 03DA }
{ 03DB } { 03DA }
{ 03DC } { 03DC }
{ 03DD } { 03DC }
{ 03DE } { 03DE }
{ 03DF } { 03DE }
{ 03E0 } { 03E0 }
{ 03E1 } { 03E0 }
{ 03F0 } { 039A }
{ 03F1 } { 03A1 }
{ 03F2 } { 03F9 }
{ 03F9 } { 03F9 }
\q_recursion_tail ?
\q_recursion_stop
\cs_set_protected:Npn \__text_tmp:w #1#2#3#4#5#6#7#8
{
\tl_const:cx
{
c__text_uppercase_el_
\char_generate:nn {#1} { 12 }
\char_generate:nn {#2} { 12 }
\char_generate:nn {#3} { 12 }
_tl
}
{
\exp_after:wN \exp_after:wN \exp_after:wN
\exp_not:N \char_generate:nn {#5} { 13 }
\exp_after:wN \exp_after:wN \exp_after:wN
\exp_not:N \char_generate:nn {#6} { 13 }
\tl_if_blank:nF {#7}
{
\exp_after:wN \exp_after:wN \exp_after:wN
\exp_not:N \char_generate:nn {#7} { 13 }
}
}
}
\__text_loop:nn
{ 1F00 } { 0391 }
{ 1F01 } { 0391 }
{ 1F02 } { 0391 }
{ 1F03 } { 0391 }
{ 1F04 } { 0391 }
{ 1F05 } { 0391 }
{ 1F06 } { 0391 }
{ 1F07 } { 0391 }
{ 1F08 } { 0391 }
{ 1F09 } { 0391 }
{ 1F0A } { 0391 }
{ 1F0B } { 0391 }
{ 1F0C } { 0391 }
{ 1F0D } { 0391 }
{ 1F0E } { 0391 }
{ 1F0F } { 0391 }
{ 1F10 } { 0395 }
{ 1F11 } { 0395 }
{ 1F12 } { 0395 }
{ 1F13 } { 0395 }
{ 1F14 } { 0395 }
{ 1F15 } { 0395 }
{ 1F18 } { 0395 }
{ 1F19 } { 0395 }
{ 1F1A } { 0395 }
{ 1F1B } { 0395 }
{ 1F1C } { 0395 }
{ 1F1D } { 0395 }
{ 1F20 } { 0397 }
{ 1F21 } { 0397 }
{ 1F22 } { 0397 }
{ 1F23 } { 0397 }
{ 1F24 } { 0397 }
{ 1F25 } { 0397 }
{ 1F26 } { 0397 }
{ 1F27 } { 0397 }
{ 1F28 } { 0397 }
{ 1F29 } { 0397 }
{ 1F2A } { 0397 }
{ 1F2B } { 0397 }
{ 1F2C } { 0397 }
{ 1F2D } { 0397 }
{ 1F2E } { 0397 }
{ 1F2F } { 0397 }
{ 1F30 } { 0399 }
{ 1F31 } { 0399 }
{ 1F32 } { 0399 }
{ 1F33 } { 0399 }
{ 1F34 } { 0399 }
{ 1F35 } { 0399 }
{ 1F36 } { 0399 }
{ 1F37 } { 0399 }
{ 1F38 } { 0399 }
{ 1F39 } { 0399 }
{ 1F3A } { 0399 }
{ 1F3B } { 0399 }
{ 1F3C } { 0399 }
{ 1F3D } { 0399 }
{ 1F3E } { 0399 }
{ 1F3F } { 0399 }
{ 1F40 } { 039F }
{ 1F41 } { 039F }
{ 1F42 } { 039F }
{ 1F43 } { 039F }
{ 1F44 } { 039F }
{ 1F45 } { 039F }
{ 1F48 } { 039F }
{ 1F49 } { 039F }
{ 1F4A } { 039F }
{ 1F4B } { 039F }
{ 1F4C } { 039F }
{ 1F4D } { 039F }
{ 1F50 } { 03A5 }
{ 1F51 } { 03A5 }
{ 1F52 } { 03A5 }
{ 1F53 } { 03A5 }
{ 1F54 } { 03A5 }
{ 1F55 } { 03A5 }
{ 1F56 } { 03A5 }
{ 1F57 } { 03A5 }
{ 1F59 } { 03A5 }
{ 1F5B } { 03A5 }
{ 1F5D } { 03A5 }
{ 1F5F } { 03A5 }
{ 1F60 } { 03A9 }
{ 1F61 } { 03A9 }
{ 1F62 } { 03A9 }
{ 1F63 } { 03A9 }
{ 1F64 } { 03A9 }
{ 1F65 } { 03A9 }
{ 1F66 } { 03A9 }
{ 1F67 } { 03A9 }
{ 1F68 } { 03A9 }
{ 1F69 } { 03A9 }
{ 1F6A } { 03A9 }
{ 1F6B } { 03A9 }
{ 1F6C } { 03A9 }
{ 1F6D } { 03A9 }
{ 1F6E } { 03A9 }
{ 1F6F } { 03A9 }
{ 1F70 } { 0391 }
{ 1F71 } { 0391 }
{ 1F72 } { 0395 }
{ 1F73 } { 0395 }
{ 1F74 } { 0397 }
{ 1F75 } { 0397 }
{ 1F76 } { 0399 }
{ 1F77 } { 0399 }
{ 1F78 } { 039F }
{ 1F79 } { 039F }
{ 1F7A } { 03A5 }
{ 1F7B } { 03A5 }
{ 1F7C } { 03A9 }
{ 1F7D } { 03A9 }
{ 1F80 } { 1FBC }
{ 1F81 } { 1FBC }
{ 1F82 } { 1FBC }
{ 1F83 } { 1FBC }
{ 1F84 } { 1FBC }
{ 1F85 } { 1FBC }
{ 1F86 } { 1FBC }
{ 1F87 } { 1FBC }
{ 1F88 } { 1FBC }
{ 1F89 } { 1FBC }
{ 1F8A } { 1FBC }
{ 1F8B } { 1FBC }
{ 1F8C } { 1FBC }
{ 1F8D } { 1FBC }
{ 1F8E } { 1FBC }
{ 1F8F } { 1FBC }
{ 1F90 } { 1FCC }
{ 1F91 } { 1FCC }
{ 1F92 } { 1FCC }
{ 1F93 } { 1FCC }
{ 1F94 } { 1FCC }
{ 1F95 } { 1FCC }
{ 1F96 } { 1FCC }
{ 1F97 } { 1FCC }
{ 1F98 } { 1FCC }
{ 1F99 } { 1FCC }
{ 1F9A } { 1FCC }
{ 1F9B } { 1FCC }
{ 1F9C } { 1FCC }
{ 1F9D } { 1FCC }
{ 1F9E } { 1FCC }
{ 1F9F } { 1FCC }
{ 1FA0 } { 1FFC }
{ 1FA1 } { 1FFC }
{ 1FA2 } { 1FFC }
{ 1FA3 } { 1FFC }
{ 1FA4 } { 1FFC }
{ 1FA5 } { 1FFC }
{ 1FA6 } { 1FFC }
{ 1FA7 } { 1FFC }
{ 1FA8 } { 1FFC }
{ 1FA9 } { 1FFC }
{ 1FAA } { 1FFC }
{ 1FAB } { 1FFC }
{ 1FAC } { 1FFC }
{ 1FAD } { 1FFC }
{ 1FAE } { 1FFC }
{ 1FAF } { 1FFC }
{ 1FB0 } { 1FB8 }
{ 1FB1 } { 1FB9 }
{ 1FB2 } { 1FBC }
{ 1FB3 } { 1FBC }
{ 1FB4 } { 1FBC }
{ 1FB6 } { 0391 }
{ 1FB7 } { 1FBC }
{ 1FB8 } { 1FB8 }
{ 1FB9 } { 1FB9 }
{ 1FBA } { 0391 }
{ 1FBB } { 0391 }
{ 1FBC } { 1FBC }
{ 1FBD } { 1FBD }
{ 1FC2 } { 1FCC }
{ 1FC3 } { 1FCC }
{ 1FC4 } { 1FCC }
{ 1FC6 } { 0397 }
{ 1FC7 } { 1FCC }
{ 1FC8 } { 0395 }
{ 1FC9 } { 0395 }
{ 1FCA } { 0397 }
{ 1FCB } { 0397 }
{ 1FCC } { 1FCC }
{ 1FD0 } { 1FD8 }
{ 1FD1 } { 1FD9 }
{ 1FD2 } { 03AA }
{ 1FD3 } { 03AA }
{ 1FD6 } { 0399 }
{ 1FD7 } { 03AA }
{ 1FD8 } { 1FD8 }
{ 1FD9 } { 1FD9 }
{ 1FDA } { 0399 }
{ 1FDB } { 0399 }
{ 1FE0 } { 1FE8 }
{ 1FE1 } { 1FE9 }
{ 1FE2 } { 03AB }
{ 1FE3 } { 03AB }
{ 1FE4 } { 03A1 }
{ 1FE5 } { 03A1 }
{ 1FE6 } { 03A5 }
{ 1FE7 } { 03AB }
{ 1FE8 } { 1FE8 }
{ 1FE9 } { 1FE9 }
{ 1FEA } { 03A5 }
{ 1FEB } { 03A5 }
{ 1FEC } { 1FEC }
{ 1FF2 } { 1FFC }
{ 1FF3 } { 1FFC }
{ 1FF4 } { 1FFC }
{ 1FF6 } { 03A9 }
{ 1FF7 } { 1FFC }
{ 1FF8 } { 039F }
{ 1FF9 } { 039F }
{ 1FFA } { 03A9 }
{ 1FFB } { 03A9 }
{ 1FFC } { 1FFC }
\q_recursion_tail ?
\q_recursion_stop
}
\group_end:
\bool_lazy_or:nnF
{ \sys_if_engine_luatex_p: }
{ \sys_if_engine_xetex_p: }
{
\cs_new:Npn \__text_change_case_upper_el:nnnN #1#2#3#4
{
\int_compare:nNnTF { `#4 } > { "80 }
{
\int_compare:nNnTF { `#4 } < { "E0 }
{ \__text_change_case_upper_el:nnnNN }
{
\int_compare:nNnTF { `#4 } < { "F0 }
{ \__text_change_case_upper_el:nnnNNN }
{ \__text_change_case_char:nnnN }
}
}
{ \__text_change_case_char:nnnN }
{#1} {#2} {#3} #4
}
\cs_new:Npn \__text_change_case_upper_el:nnnNN #1#2#3#4#5
{ \__text_change_case_upper_el:nnnn {#1} {#2} {#3} {#4#5} }
\cs_new:Npn \__text_change_case_upper_el:nnnNNN #1#2#3#4#5#6
{ \__text_change_case_upper_el:nnnn {#1} {#2} {#3} {#4#5#6} }
\cs_new:Npn \__text_change_case_upper_el:nnnn #1#2#3#4
{
\cs_if_exist:cTF { c__text_uppercase_el_ \tl_to_str:n {#4} _tl }
{
\__text_change_case_store:v
{ c__text_uppercase_el_ \tl_to_str:n {#4} _tl }
\__text_change_case_loop:nnw {#1} {#3}
}
{ \__text_change_case_char:nnnN {#1} {#2} {#3} #4 }
}
}
\ExplSyntaxOff
\begin{document}
\MakeUppercase[el]{Πρόταση για έλεγχο των τόνων στα κεφαλαία }
\end{document}
更新发布后expl3
,您只需要零件
\DeclareDocumentCommand \MakeUppercase { o m }
{
\IfNoValueTF {#1}
{ \text_uppercase:n {#2} }
{ \text_uppercase:nn {#1} {#2} }
}
加上这个\MakeUppercase[el]
想法。
答案2
注意\MakeUppercase
在 2022 年 6 月版本中有一次重大升级,这主要适用于当前版本。
Unicode 数据文件将重音字母显示为大写,这并不总是符合要求。您可以在 pdflatex 中本地禁用重音:
\documentclass[12pt]{article}
\usepackage{calc}
\usepackage[a4paper, total={180mm,247mm},left=15mm,top=20mm]{geometry}
\usepackage{gfsartemisia}
\usepackage[T1,LGR]{fontenc}
\usepackage[english, greek]{babel}
\begin{document}
Πρόταση για έλεγχο των τόνων στα κεφαλαία
{\let\acctonos\relax
\MakeUppercase{Πρόταση για έλεγχο των τόνων στα κεφαλαία}}
\end{document}