适用sizeN.clo的环境

适用sizeN.clo的环境

我的文档的基本字体大小是 12pt,但我希望图形的排版好像基本字体大小是 10pt(有些图形使用图形包来硬连接字体大小命令而不是提供\foosize间接寻址,所以我不能只用这种方式来修复它)。

我已经发现本地切换不同的字体大小,所以我的目标是把它包装起来\newenvironment编辑:它并不像使用那么简单如何创建一个宏,当定义宏时,该宏可以读取文件的内容?,但我现在有这个:

\usepackage{catchfile}
\CatchFileDef{\tenpointdecl}{size10.clo}{\makeatletter}
\newenvironment{fontsizeten}{%
  \let\saveendinput\endinput
  \let\endinput\relax
  \let\savenewcommand\newcommand
  \let\newcommand\renewcommand
  \tenpointdecl
  \let\newcommand\savenewcommand
  \let\endinput\saveendinput
}{}

\tenpointdecl这可行,但我觉得不够优雅。如果有办法重写 的内容,这样\let每次调用时就不需要 s 了,那就更好了。有什么建议吗?

答案1

\endinput除了重新定义之外,还必须避免阅读\newcommand

\documentclass[a4paper,12pt]{article}
\usepackage{catchfile,lipsum}

\makeatletter
\let\clo@newcommand\newcommand
\let\clo@endinput\endinput
\CatchFileDef{\clo@sizeten}{size10.clo}{}

\newenvironment{fontsizeten}
  {\par                           % go in vertical mode
   \let\endinput\relax            % neutralize \endinput
   \let\newcommand\renewcommand   % the commands are already defined
   \clo@sizeten                   % "read" the file
   \let\endinput\clo@endinput     % revert to the original command
   \let\newcommand\clo@newcommand % revert to the original command
  }
  {\par}
\makeatother

\begin{document}
\lipsum[1-2]

\begin{fontsizeten}
\lipsum[1-2]
\end{fontsizeten}

\lipsum[1-2]
\end{document}

照常,利普萨姆仅用于创建虚拟文本。在执行的重新定义后,\newcommand和的原始含义\endinput应立即恢复。size10.clo

答案2

我会考虑每次都重新读取文件。只要你不经常切换,这不会降低效率。

无论如何,您可以使用catchfile软件包。它需要 e-TeX,可以避免您遇到的问题。另请参阅如何创建一个宏,当定义宏时,该宏可以读取文件的内容?

您看到的问题是 TeX 的\input(在 LaTeX 中)在(或全局)\@@input中不起作用,因为据我所知,TeX 在宏定义期间遇到文件结尾时会认为这是一个错误。另外,您不应该使用或,因为这不仅会扩展,还会扩展其内容。您不希望这样!您需要改用,但由于上述原因,这也不起作用。\edef\xdef\edef\xdef\@@input\expandafter

相关内容