我创建了一个具有我自己的非标准连字符模式的文件,但我不知道如何强制 LaTeX 使用我的模式而不是默认模式。
我正在使用 Linux Mint 和 pdflatex 编译我的“.tex”文件。我发现了一个dumylang
选项和一个dumyhyph.tex
文件,用于“测试新的连字模式”,这正是我想要做的。然而,到目前为止,我还无法激活它们。
我的图案文件包含以下内容:
\patterns{
1p 1t 1c 1k 1j 1w t2r
1fe 1fa 1fo 1fi 1fy 1fu
1re 1ra 1ro 1ri 1ry 1ru
1se 1sa 1so 1si 1sy 1su
%
%...deleted lines...
%
kyle me2ke ky2nu ni2e fa2l r2ke
u2je u2ma i2jau ru2me
e2m a2m o2m i2m y2m u2m nh2ma nh2mu
3e2le 3e2la 3e2lo 3e2li 3e2ly 3e2lu
}
%\dump
我该怎么做?(请详细说明,因为我对 TeX 和 Linux 的经验非常有限)
答案1
我在对该问题的评论中尝试给出的部分答案不起作用,至少有两个原因:
个人 texmf 树中的格式文件 (
$TEMFHOME
) 是不是 允许用同名覆盖系统格式文件(非常明智);无论如何,pdfTeX 引擎的格式名称应该是
pdflatex.fmt
,而不是latex.fmt
。
因此,最好的办法是为自定义格式指定一个自定义名称(这似乎也很明智)。我将逐步解释一种可行的方法,这次,我自己进行了测试。 请注意,以下说明假设使用 TeX Live 发行版!
首先,在文件系统的任意位置创建一个临时目录;此后,此目录将被称为FOO/
。接下来,假设您的自定义连字文件如下所示:
% It's a dummy file dumyhyph.tex created for testing purposes.
% This file is normally defined in language.dat et may be used by language
% styles such as french.sty to define a temporary language. B. Gaulle 23/10/91
\begingroup
\patterns{ % dummy patterns
.ach4
z4zy
% I add a pattern that does permit hyphenation:
aa5a
% (hyphenation will be possible only at places where at least three consecutive
% "a" characters occur).
}
\endgroup
当然,这只是一个例子,但它是我下面要使用的例子。请注意,它只定义了一允许的连字符,即aa-a
。
我们将在此文件末尾添加以下行
\gdef\ParapaPonziPonziPo{*** This is my home-made LaTeX format! ***}
我们这样做只是为了有一种方法可以更轻松地检查在 TeX 运行期间加载的是我们的自定义格式,而不是系统格式。因此,我们的文件现在如下所示:
% It's a dummy file dumyhyph.tex created for testing purposes.
% This file is normally defined in language.dat et may be used by language
% styles such as french.sty to define a temporary language. B. Gaulle 23/10/91
\begingroup
\patterns{ % dummy patterns
.ach4
z4zy
% I add a pattern that does permit hyphenation:
aa5a
% (hyphenation will be possible only at places where at least three consecutive
% "a" characters occur).
}
\endgroup
\gdef\ParapaPonziPonziPo{*** This is my home-made LaTeX format! ***}
保存在FOO/dumyhyph.tex
;注意基本名称dumyhyph.tex
必须可以使用。此后,创建FOO
当前目录。
我们将调用我们的自定义格式pdflatexmyhyphen
;因此,在目录内FOO
,在 shell 提示符下发出以下命令:
pdflatex -ini -etex -jobname pdflatexmyhyphen pdflatex.ini
片刻之后,您将再次获得 shell 提示符;您现在应该发现FOO
包含以下文件:
dumyhyph.tex
pdflatexmyhyphen.fmt
pdflatexmyhyphen.log
texsys.aux
花一分钟时间查看抄本文件pdflatexmyhyphen.log
;向下滚动直到找到以下内容
===========================================
Local configuration file hyphen.cfg used
===========================================
…省略了一些行…
\l@usenglish=\language0
\l@USenglish=\language0
\l@american=\language0
\l@dumylang=\language1
(./dumyhyph.tex)
这一行(./dumyhyph.tex)
证明该文件dumyhyph.tex
是从当前目录输入的,与其他连字模式文件相反。
好的,现在运行命令
kpsewhich -var-value TEXMFHOME
了解你的系统假设你的个人 texmf 树位于何处;假设答案是
/home/donalddu/texmf
然后,在路径中创建任何缺失的目录
/home/donalddu/texmf/web2c/
(请注意,这/home/donalddu/
应该是你的主目录,因此你可以这样做没有(不需要超级用户权限);最后,将文件pdflatexmyhyphen.fmt
从移动(或复制)FOO/
到/home/donalddu/texmf/web2c/
。
就这些;正如@cfr 所说,无需运行mktexlsr
:包含自定义连字模式的自定义格式已可供使用。
那么,让我们尝试一下,通过编译以下文件 - 我们称之为TryMyHyphenation.tex
:
% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly
% declare the paper format.
\usepackage[T1]{fontenc} % Not always necessary, but recommended.
% End of standard header. What follows pertains to the problem at hand.
\ifdefined\ParapaPonziPonziPo
\typeout{\ParapaPonziPonziPo}
\fi
\usepackage[english]{babel}
\begin{document}
This is a paragraph written in English, to which English hyphenation rules
apply. It is followed by some other paragraphs written in our ``dummy
language''; in order to make our custom hyphenation rules apply to them, we
enclose them within a \texttt{hyphenrules} environment.
\begin{hyphenrules}{dumylang}
The ``dummy language'' is curiously similar to English, except that it doesn't
permit words to be hyphenated at all---or almost so. Indeed, a peculiarity of
this language is that it includes non-English words like
``mumbawohckijutresxxiukklanghornitudinal'' and ``axaxaxaaaxaxaxa'', and
that---aha!---hyphenation is permitted when three~``a'' occur in a row. So,
while, for example, ``mumbawohckijutresxxiukklanghornitudinal'' cannot be
broken, and hence produces ``overfull \verb|\hbox|es'', the word
``axaxaxaaaxaxaxa'' \emph{can} be hyphenated, provided, of course, that you are
using a \LaTeX\ format that incorporates our custom hyphenation patterns.
Another paragraph that again demonstrate this: pneumococcus, axaxaxaaaxaxaxa,
hyperbola, neutrino.
\end{hyphenrules}
\end{document}
首先,尝试使用普通的 LaTeX 格式进行编译,使用常用命令
pdflatex TryMyHyphenation
看看结果:你会发现单词“axaxaxaaaxaxaxa”是不是用连字符。
接下来,尝试使用新的自定义格式编译它:这可以通过-fmt
命令行选项来完成。也就是说,输入
pdflatex -fmt pdflatexmyhyphen TryMyHyphenation
现在应该发生两件事:
在编译过程中,你应该看到以下消息
*** This is my home-made LaTeX format! ***
并在成绩单文件中找到它;
TeX 现在应该能够将单词“axaxaxaaaxaxaxa”用连字符连接起来。
这是我在第二次运行中得到的输出:
替代方法:使用fmtutil
替换原始格式
昨天我还没有测试过这种方法,所以我不敢推荐它。与之前的答案相反,这次我们不会用不同的名字制作自定义格式,但我们会pdflatex.fmt
用自定义版本覆盖文件本身。虽然无法在个人 texmf 树中执行此操作,但可以在 TeX Live 的监督下从主目录的不同位置执行此操作。事实证明,此解决方案实际上比前一个解决方案更容易执行;但替换 (pdf)LaTeX 格式本身并不是所有用户都感到满意的事情…… (:-)
(当然,也有很多很好的理由,即使是知识渊博的用户也可能宁愿避免这样做。)
因此,让我们从dumyhyph.tex
保存在我们选择的目录中的自定义文件重新开始FOO/
(请记住,虽然目录的名称和位置是任意的,但基本名称dumyhyph.tex
必须使用):
% It's a dummy file dumyhyph.tex created for testing purposes.
% This file is normally defined in language.dat et may be used by language
% styles such as french.sty to define a temporary language. B. Gaulle 23/10/91
\begingroup
\patterns{ % dummy patterns
.ach4
z4zy
% I add a pattern that does permit hyphenation:
aa5a
% (hyphenation will be possible only at places where at least three consecutive
% "a" characters occur).
}
\gdef\ParapaPonziPonziPo{*** This is a home-made TeX format! ***}
\def\typeout{\immediate\write17}
\obeyspaces
\typeout{****************************************************************}
\typeout{* Custom hyphenation pattern file `dumyhyph.tex' has been *}
\typeout{* loaded instead of the original `dumyhyph.tex'! *}
\typeout{****************************************************************}
\endgroup
如您所见,我添加了一些横幅,它们将在格式化过程中显示。创建FOO/
当前目录并发出以下命令之一:
如果你只想重建
pdflatex.fmt
格式文件,请发出mktexfmt pdflatex.fmt
(这是我的建议,至少对于测试目的而言);
如果你想重建全部pdfTeX 引擎的格式,问题
fmtutil --byengine pdftex
(你确定这是你想要的吗?)。
终端上会闪现很多消息:其中一条消息很重要,它会在您再次获得 shell 提示符之前显示。它会告诉您自定义格式的安装位置,如下所示:
fmtutil: /home/mezzetti/.texmf-var/web2c/pdflatex.fmt installed.
记下这个位置! 它依赖于系统,当您想要摆脱自定义格式时可能需要它。
假设上述位置,你还应该找到一个名为
/home/mezzetti/.texmf-var/web2c/pdflatex.log
打开它:它应该包含以下几行,大约在第 400 行左右:
===========================================
Local configuration file hyphen.cfg used
===========================================
(/usr/local/texlive/2015/texmf-dist/tex/generic/babel/hyphen.cfg
File: hyphen.cfg 2016/02/24 3.9q Babel hyphens
(/usr/local/texlive/2015/texmf-dist/tex/generic/babel/switch.def
File: switch.def 2016/02/24 3.9q Babel switching mechanism
)
\l@english=\language0
(/usr/local/texlive/2015/texmf-dist/tex/generic/hyphen/hyphen.tex)
\l@usenglish=\language0
\l@USenglish=\language0
\l@american=\language0
\l@dumylang=\language1
(/Users/gustavo/Desktop/FOO/dumyhyph.tex
****************************************************************
* Custom hyphenation pattern file `dumyhyph.tex' has been *
* loaded instead of the original `dumyhyph.tex'! *
****************************************************************
)
这证实了我们使用了自定义连字文件(是的,它还表明生成此示例的系统不是最新的……)
您已完成。从现在起,将使用包含您自定义模式的格式来代替原始格式:无需使用任何-fmt
选项,只需照常编译即可。
当您想要删除自定义格式时,请返回笔记并删除 下的所有内容.../web2c/
,包括目录.../web2c
本身。例如,假设上面显示的位置,您可以转到
rm -rf /home/mezzetti/.texmf-var/web2c/
再举一个例子,如果你运行后收到的消息mktexfmt
是
mktexfmt [INFO]: /Users/gustavo/Library/texlive/2015/texmf-var/web2c/pdftex/pdflatex.fmt installed.
你可以发出以下命令
rm -rf /Users/gustavo/Library/texlive/2015/texmf-var/web2c/
恢复分发格式。