![在 LaTeX 文档中打印“系统信息”](https://linux22.com/image/257217/%E5%9C%A8%20LaTeX%20%E6%96%87%E6%A1%A3%E4%B8%AD%E6%89%93%E5%8D%B0%E2%80%9C%E7%B3%BB%E7%BB%9F%E4%BF%A1%E6%81%AF%E2%80%9D.png)
我以前用过很多次 TeX,但现在又开始使用它了。
我想打印一份包含如下信息的文档详细信息页面:
Compiled on:
Compiled by:
OS version:
LaTeX version:
显然前两个很容易(\today
和\author
)。其他的命令有类似的吗?或者有可以管理这个的包吗?
答案1
如果您愿意使用 shell-escape(即使用“latex --shell-escape”进行编译),您可能可以在类 Unix 平台和 Cygwin 上使用“uname”...
\documentclass{article}
\makeatletter
% redefine \author as \maketitle clears \@author...
\let\oldAuthor=\author
\renewcommand{\author}[1]{\oldAuthor{#1}\gdef\ShowAuthor{#1}}
\newcommand{\ShowOsVersion}{%
\immediate\write18{\unexpanded{foo=`uname -a` && echo "\\verb+${foo}+" > tmp.tex}}%
\input{tmp}\immediate\write18{rm tmp.tex}%
}
\makeatother
\title{This is a Document}
\author{John Smith}
\begin{document}
\maketitle
Compiled on: \today
Compiled by: \ShowAuthor
OS version: \ShowOsVersion
\LaTeX{} version: \LaTeXe~\fmtversion
\end{document}
如果您想在 Windows 上使用类似的东西,我认为您可以使用类似的方法......
\immediate\write18{systeminfo | findstr /B /C:"OS Name" /C:"OS Version" > tmp.tex}
并且可能稍微调整一下结构 - 例如,您需要从主文本中删除“OS 版本:”,因为这个“systeminfo”命令输出的不仅仅是版本号 - 对我来说,它输出
OS Name: Microsoft Windows 7 Professional
OS Version: 6.1.7601 Service Pack 1 Build 7601
答案2
一个起点。以下示例提取了 TeX 宏级别可用的信息(代码部分取自hyperref
):
\documentclass{article}
\usepackage{hologo}
\usepackage{ifluatex}
\usepackage{ifxetex}
\usepackage{ifvtex}
\makeatletter
\newcommand*{\InfoLaTeX}{%
\hologo{\fmtname} \textless\fmtversion\textgreater
}
\newcommand*{\InfoTeX}{%
\ifxetex
\hologo{XeTeX}-%
\the\XeTeXversion\XeTeXrevision
\else
\ifluatex
\hologo{LuaTeX}-%
\begingroup
\count@=\luatexversion
\divide\count@ by 100 %
\edef\x{\the\count@}%
\count@=-\x\relax
\multiply\count@ by 100 %
\advance\count@ by \luatexversion
\x.\the\count@.\luatexrevision
\endgroup
\else
\@ifundefined{pdftexversion}{%
\ifvtex
\hologo{VTeX}%
\@ifundefined{VTeXversion}{%
}{%
\begingroup
\count@\VTeXversion
\divide\count@ 100 %
\space v\the\count@
\multiply\count@ -100 %
\advance\count@\VTeXversion
.\two@digits\count@
\endgroup
}%
\else
\hologo{TeX}%
\fi
}{%
\hologo{pdfTeX}-%
\ifnum\pdftexversion<100 %
\the\pdftexversion.\pdftexrevision
\else
\ifnum\pdftexversion<130 %
\expandafter\@car\the\pdftexversion\@empty\@nil.%
\expandafter\@cdr\the\pdftexversion\@empty\@nil
\pdftexrevision
\else
\expandafter\@car\the\pdftexversion\@empty\@nil.%
\expandafter\@cdr\the\pdftexversion\@empty\@nil.%
\pdftexrevision
\fi
\fi
}%
\fi
\fi
}
\makeatother
\begin{document}
\begin{tabular}{@{}ll@{}}
Compiled by: & \InfoTeX \\
\hologo{LaTeX} version: & \InfoLaTeX \\
\end{tabular}
\end{document}
脚本可以收集其他数据(操作系统等)并将定义写入.tex
TeX 运行可以读取的文件中。
答案3
一种可行的方法(至少在您的文档规模超过单个源文件时)是使用 shell 脚本或批处理文件来查找所需的信息并将其写入名为 的文件sysinfo.tex
。然后在主文档中引用它。
我主要将这种技术用于已经大量机器生成的文档,其中还包括生成程序的修订信息以及来自版本控制系统的信息,但没有理由不能对更普通的文档这样做。