在 pdflatex 中获取 Texlive 版本?

在 pdflatex 中获取 Texlive 版本?

我刚刚安装了 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宏将 之前的所有内容作为其第一个参数(#2TeX#3Live#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

2014 年

答案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}

相关内容