在 LaTeX 文档中打印“系统信息”

在 LaTeX 文档中打印“系统信息”

我以前用过很多次 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}

脚本可以收集其他数据(操作系统等)并将定义写入.texTeX 运行可以读取的文件中。

结果

答案3

一种可行的方法(至少在您的文档规模超过单个源文件时)是使用 shell 脚本或批处理文件来查找所需的信息并将其写入名为 的文件sysinfo.tex。然后在主文档中引用它。

我主要将这种技术用于已经大量机器生成的文档,其中还包括生成程序的修订信息以及来自版本控制系统的信息,但没有理由不能对更普通的文档这样做。

相关内容