我刚刚安装了 Texlive 2014,遇到了这个问题:lgrxenc.def 未找到解决方案显然是LGRx
从中删除\usepackage[LGRx,T1]{fontenc}
;但我宁愿使用类似这样的方法:
\ifnum \texliveVersion<2013
\usepackage[LGRx,T1]{fontenc}
\else
\usepackage[T1]{fontenc}
\usepackage[greek,english]{babel}
\fi
有没有这样的东西,不需要我-shell-escape
每次都运行——以防万一我需要在装有早期 TexLive 的机器上编译相同的文档?
编辑:这就是我的意思 - 这应该是代码https://tex.stackexchange.com/a/191705/2595,但带有 Texlive2014 的条件开关;不幸的是,它崩溃了! Undefined control sequence. l.50 ...\bbl@monogreek \bbl@monogreek=\l@monogreek
:
\documentclass[a4paper]{article}
% https://tex.stackexchange.com/a/16794/2595
\begingroup\makeatletter\endlinechar=\m@ne\everyeof{\noexpand}
\edef\x{\endgroup\def\noexpand\TeXLiveVersion{\@@input|"pdflatex -version | awk '/TeX Live/{print substr($5, 0, length($5)-1);}'" }}\x
\typeout{TexLive version is: \TeXLiveVersion}
% https://tex.stackexchange.com/a/191705/2595
\ifnum\TeXLiveVersion<2014 %
\typeout{TexLive version is smaller than 2014, using LGRx} %
\usepackage[LGRx,T1]{fontenc} %
\else %
\typeout{TexLive version is >= 2014, NOT using LGRx} %
\usepackage[T1]{fontenc} %
\fi %
% \usepackage{xgreek}
\usepackage[utf8x]{inputenx}
\usepackage[english,greek]{babel}
\begin{document}
The starting verse of the Iliad is
\begin{quotation}\greektext
Μῆνιν ἄειδε, θεά, Πηληιάδεω Ἀχιλῆος
\end{quotation}
and it's really great.
\end{document}
答案1
这与pdflatex
和 一起使用lualatex
。
\documentclass{article}
\def\gettexliveversion#1(#2 #3 #4#5#6#7#8)#9\relax{#4#5#6#7}
\edef\texliveversion{\expandafter\gettexliveversion\pdftexbanner\relax}
\ifnum\texliveversion<2013
\usepackage[LGRx,T1]{fontenc}
\else
\usepackage[T1]{fontenc}
\fi
\usepackage[greek,english]{babel}
在“vanilla TeX Live”和 Debian 提供的版本上进行了测试。
解释:\pdftexbanner
扩展为
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) kpathsea version 6.2.0
在 vanilla TeX Live 上,但
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/Debian) kpathsea version 6.2.0
在 Debian TeX Live 上(其他打包发行版也类似)。\gettexliveversion
宏将 之前的所有内容作为其第一个参数(
;#2
是TeX
、#3
是Live
、#4#5#6#7
是年份,#8
直到 之前的所有内容,是)
其余#9
的。人们可能还会将其用于#8
其他目的,因此我将其留在那里,而不是吞噬年份之后的所有内容。
替代(更简单)版本:
\IfFileExists{lgrxenc.def}
{\usepackage[LGRx,T1]{fontenc}}
{\usepackage[T1]{fontenc}}
测试 1
\documentclass{article}
\def\gettexliveversion#1(#2 #3 #4#5#6#7#8)#9\relax{#4#5#6#7}
\edef\texliveversion{\expandafter\gettexliveversion\pdftexbanner\relax}
\ifnum\texliveversion<2013
\usepackage[LGRx,T1]{fontenc}
\else
\usepackage[T1]{fontenc}
\fi
\usepackage[utf8]{inputenc}
\usepackage[greek,english]{babel}
\begin{document}
The starting verse of the Iliad is
\begin{quotation}\greektext
Μῆνιν ἄειδε, θεά, Πηληιάδεω Ἀχιλῆος
\end{quotation}
and it's really great.
\end{document}
测试 2
\documentclass{article}
\IfFileExists{lgrxenc.def}
{\usepackage[LGRx,T1]{fontenc}}
{\usepackage[T1]{fontenc}}
\usepackage[utf8]{inputenc}
\usepackage[greek,english]{babel}
\begin{document}
The starting verse of the Iliad is
\begin{quotation}\greektext
Μῆνιν ἄειδε, θεά, Πηληιάδεω Ἀχιλῆος
\end{quotation}
and it's really great.
\end{document}
两项测试均尝试使用 TeX Live 2012 和 2014。输出总是一样的:
答案2
这是一个仅测试编码文件是否存在的版本,因此与 TL 版本等无关。(我认为这也应该适用于 MiKTeX 等。如果您安装了本地版本的编码,它也会起作用,尽管我绝不是说这样做是明智的。)
\documentclass[a4paper,greek,british]{article}% or american note that the LAST specified language is default
\IfFileExists{lgrxenc.def}{%
\typeout{TexLive version is smaller than 2014, using LGRx} % probably better to change this to a more accurate message e.g. 'lgrxenc.def not found...'
\usepackage[LGRx,T1]{fontenc}%
}{%
\typeout{TexLive version is >= 2014, NOT using LGRx}%
\usepackage[T1]{fontenc}%
}
% \usepackage{xgreek}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\begin{document}
The starting verse of the Iliad is
\begin{quotation}\greektext
Μῆνιν ἄειδε, θεά, Πηληιάδεω Ἀχιλῆος
\end{quotation}
and it's really great.
\end{document}
例如,对于 TL 2014,我得到
TexLive version is >= 2014, NOT using LGRx
答案3
快速而粗糙的测试 - 没有 lua,使用pdflatex
和运行lualatex
(但在这种情况下不需要);-)
\documentclass{article}
\usepackage{xstring}
\IfSubStr{\pdftexbanner}{2014}{%
\usepackage[T1]{fontenc}%
\usepackage[greek,english]{babel}
}{%
\usepackage[LGRx,T1]{fontenc}
}
\usepackage{blindtext}
\begin{document}
\blindtext
\end{document}