解决方法

解决方法

重述问题和解决方案

如果使用该包中的 times 字体时txfonts使用了诸如 ę、ą 之类的字符或带有 ogonek 的其他字符,则会导致表格显示不正确(见下文的图片)。

这与所涉及的程序不是局部的有关,也就是说,在其他地方会产生不良的副作用。

将所做的任何操作保持在本地的有效方法是将其括在括号中{ę}。通常可以通过以下方式在序言中映射ę{ę}a{ą}等来调用任何提到相关字符的方法:

\DeclareUnicodeCharacter {281}{{ę}} % 281 is the decimal utf-8 code of ę
...

这将解决整个文档的问题

下文标题“解决方法”下介绍了一种更通用的解决方案,可以修复源文件中引入的错误txfonts。但是,如果您不想摆弄包的调用方式(可能是因为它在您不想更改的样式表中被调用),重新定义字符是一个很好的解决方案

最初的问题

我正在使用 (MikTeX,所有软件包都是最新的) 排版一份多语言文档pdflatex。我需要使用 Times 字体,而且目前我无法切换到 LuaLatex 或 XeLatex,因为我正处于使用出版商​​提供的课程排版书籍的最后阶段,我需要调整我的代码才能使用上述这些。

使用波兰字符会txfonts导致表格崩溃:

\documentclass{article} 
\usepackage{txfonts}
%\usepackage{mathptmx}
\usepackage[polish, english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}       
\newcommand{\ee}{\selectlanguage{english}\fontencoding{T1}}
\newcommand{\pl}{\selectlanguage{polish}\fontencoding{T1}}
\begin{document}
\textbf{A minimal example using a times font}
As soon as I enter the Polish character \pl ę  \ee the tables crash 
(the lines of the table get printed onto each other).
\begin{table}\begin{center}\begin{tabular}{|l||l|l|}
\hline
type&n    &rel        \\
\hline
\hline
One line in the table &260& many  \\
Another line in the table      &792&49  \\
A third line in the table       &288&1  \\
\hline
\end{tabular}\end{center}\caption{A test table.}\end{table}
\end{document}

替代包mathptmx不会导致此问题;但是,它不提供我需要的希腊字符。以下最小示例说明了这一点:

\documentclass{article} 
%\usepackage{mathptmx}
\usepackage{txfontsb}
\usepackage[polutonikogreek,polish, english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[LGR,T1]{fontenc}       
\newcommand{\ee}{\selectlanguage{english}\fontencoding{T1}}
\newcommand{\grrk}{\selectlanguage{polutonikogreek}\fontencoding{LGR}}
\begin{document}
\textbf{A minimal example using a times font}
I need to  print polytonic Greek (and other special characters) using a 
times font (e.g. \grrk ἐᾶν \textbf{ἐᾶν})! \ee  
I use the \emph{txfonts} (or   \emph{txfontsb}) package,
the alternative \emph{mathptmx} cannot find the metric files (``Couldn't find `grtm.cfg'''). 
\end{document}

我该如何使用txfonts并防止表格崩溃?我也试过了txfontsb

更新:我现在明白了,这与波兰语无关,它是ę 中的变音符号(奥戈内克) 会导致此问题。以下代码中也出现了同样的问题,其中 m 上有 ogonek:

    \documentclass{article} 
    \usepackage{txfonts}
    \usepackage[T1]{fontenc}       
    \begin{document}
    text with ogonek:        \k{m}  
    \begin{table}\begin{center}\begin{tabular}{|l||l|l|}
    \hline
    type&n    &rel        \\
    \hline
    \hline
    One line in the table &260& many  \\
    Another line &792&49  \\
    A third line in the table       &288&1  \\
    \hline
    \end{tabular}\end{center}\caption{A test table.}\end{table}
    \end{document}

如果\k{m}用括号括起来,表格就可以正常工作。因此,这与位置以及应用 ogonek 的{\k{m}}方式有关。txfonts

答案1

最短的修复方法:使用括号括起来 ę:

\pl {ę} \ee

对于较长的文本,您可以使用otherlanguage环境,而不是切换\selectlanguage到波兰语并切换回英语:

\begin{otherlanguage}{polish}
ę
\end{otherlanguage}

之前以\pl ę \ee\selectlanguage)为例:

波兰语文本和表格,问题

之后,使用大括号或otherlanguage

波兰语文本和表格,已修复

答案2

\selectlanguage{<language>}在段落中间说这些并不是一个好主意,因为这个命令会执行许多操作,在分页符的情况下会产生不可预测的结果,并且正如您所经历的,在其他情况下也是如此。

对于其他语言的简短插页,请使用

\foreignlanguage{polish}{ę}

对于较长的段落,你可以选择

\begin{otherlanguage*}{polish}
...
\end{otherlanguage*}

\begin{otherlanguage}{polish}
...
\end{otherlanguage}

区别在于前者不改变固定单词(章节名称等),而后者会改变。两者都会改变连字和语言快捷键的设置。

实际上没有必要写\foreignlanguage{polish}{<polish passage>}

\newcommand{\pl}[1]{\foreignlanguage{polish}{#1}}

使语法可用\pl{polish passage}

解决方法

有一个悲剧性的错误,txfonts.sty其中\k以错误的方式重新定义:\ooalign宏没有用括号保护,因此,只要在外部组级别使用带有 ogonek 的字母,设置\lineskiplimit=-\maxdimen就会变为全局的。

可以使用以下方法纠正

\makeatletter
\AtBeginDocument{\let\T@n@@nc@d@ngM@cr@M@d\relax}
\makeatother
\usepackage{txfonts}

这样可以避免错误的重新定义,因此不需要其他技巧,因为 的定义\k将保持为 fontenc 包发出的正确定义。但是,更好的加载顺序应该是

\usepackage[T1]{fontenc}       
\usepackage[utf8x]{inputenc}
\usepackage[polish,english]{babel}
\makeatletter
\AtBeginDocument{\let\T@n@@nc@d@ngM@cr@M@d\relax}
\makeatother
\usepackage{txfonts}

一个更清晰的解决方案可能是编写一个“更正包”,fixtxfonts.sty比如说

\ProvidesPackage{fixtxfonts}
\AtEndOfPackage{%
  \let\T@n@@nc@d@ngM@cr@M@d\relax
  \DeclareTextCommand{\k}{LY1}[1]{{\ooalign{\hidewidth\char7\crcr#1}}}%
}
\RequirePackage{txfonts}

并说\usepackage{fixtxfonts}而不是\usepackage{txfonts}

相关内容