语境:
在我正在规划的文档文本中,我将会出现许多外语(当然对我来说是外语)的“字符串”。
我目前的计划是使用该glossaries
软件包,因为它允许我:
- 创建自定义类型
- 添加键
- 将其视为
\gls{english name so I know what I am doing}
易于维护的字符串。 - 作为一种外语,我期望进行大量修正,并有一个单一的位置来维护和修复这些字符串
- 将第一次使用视为外文引文(英文翻译)
- 例如:
\gls{My land is rich}
可以轻松生产
- 例如:
M'fhearann saidhbhir(我的土地很肥沃)
- 无论我使用单个单词、句子还是段落,只要我重新定义 gls 调用格式化输出的外观即可。
根据一个较老的问题: 我是否过度使用了词汇表包?我相信我也可以用来etoolbox
做类似的事情
\newentry{My land is rich}{M'fhearann saidhbhir}
and use it with
\entry{My land is rich} (My land is rich)
问题:如果翻译有误,TeX 文件中的标签将不正确,但可以在定义文件中更正。这让我想知道是否有人已经编写了一个包来解决此类问题。
从概念上讲,有无数种方法可以以标签替换字符串的形式管理数据,但理想情况下,我仍然需要使用可识别的标签,因此像\entry{T1}
或\gls{T1}
或\T1
(可以用创建\newcommand{}{}
)这样的东西不会有帮助,即使它们严格解决了问题。
我见过一些看起来非常有活力的包,所以想知道它们是否存在。
我唯一没有完全形成的概念是考虑重新定义一个新的自定义命令,其中包含类似以下内容的内容:\translate{T1}{my land is rich}
第二个参数毫无用处,对作者和任何精通 TeX 的合作者来说纯粹是表面文章,而 T1 是使用任何我能使用的包(即glossaries
或)填充的标签etoolbox
答案1
这里的想法是创建一个命令,\myterm
它根据其第一个参数创建其他命令;然后可以在文档中使用这些创建的命令,并且会根据您的设置扩展为一个字符串或另一个字符串。
\documentclass{article}
\usepackage{filecontents}
% The terminology.sty file % -----------------------------------------
\begin{filecontents*}{terminology.sty}
\def\termfileversion{0.01}
\def\termfiledate{2015/06/27}
%
%
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{terminology}
[\termfiledate{} v\termfileversion{} Commands for technical terminology]
\RequirePackage{etoolbox}
\RequirePackage{xcolor}
\RequirePackage{xparse}
% When "proofing" text, highlight words
\definecolor{proofcol}{cmyk}{0, 0.87, 1, 0.21}
% Boolean switches
\providebool{proof}
\providebool{latin}
% Macro-maker:
% #1 = \macro
% #2 = {Latin string}
% #3 = [Latin root]
% #4 = {English string}
% #5 = [English root]
%
% Note: #3 and #5 might be useful if you want to create plural
% variants that can be related back to the singular forms; though this
% would require extending the \myterm macro
%
\NewDocumentCommand{\myterm}{mmomo}
{%
% The optional command (##2) here overrides the defaults
% The star (##1) means it will print the "original" in parenthesis
\expandafter\NewDocumentCommand\csname#1\endcsname{so}%
{%
% We want to be able to use the Latin or the English
\ifbool{latin}%
{% latin = true
\IfNoValueTF{##2}%
{\p@col{#2}}%
{\p@col{##2}}%
\IfBooleanTF{##1}%
{\space \showorig{#4}}%
{\relax}%
}%
{% latin = false
\IfNoValueTF{##2}%
{\p@col{#4}}%
{\p@col{##2}}%
\IfBooleanTF{##1}%
{\space \showorig{#2}}%
{\relax}%
}%
}%
}%
% Helper macros
\newcommand{\showorig}[1]{(\emph{#1})}
\newcommand{\p@col}[1]{%
\ifbool{proof}%
{\textcolor{proofcol}{#1}}%
{#1}%
}
% Now some definitions:
\myterm{useright}{usus iuris}{use of right}
\myterm{rightuse}{ius utendi}{right of using}
\myterm{rightsuse}{iura utendi}[ius utendi]{rights of using}[right of using]
\endinput
\end{filecontents*}% -------------------------------------------------
\usepackage[T1]{fontenc}
\usepackage{terminology}
\begin{document}
\parindent 0pt
\booltrue{latin}
\verb|\useright:| \useright
\verb|\rightuse:| \rightuse
\verb|\rightuse:| \rightsuse
\booltrue{proof} % Putting things in colour
\verb|\rightsuse:| \rightsuse[not wrongs of using]
\verb|\rightsuse:| \rightsuse*[not wrongs of using]
% Switch to using English
\boolfalse{latin}
\verb|\useright:| \useright*
\verb|\rightuse:| \rightuse
\verb|\rightuse:| \rightsuse
\boolfalse{proof} % No colour...
\verb|\rightsuse:| \rightsuse[not wrongs of using]
\verb|\rightsuse:| \rightsuse*[not wrongs of using]
\end{document}
这种方法的一个优点是您可以“丰富”宏,\myterm
以便它执行其他操作,例如填充索引或(在上面的示例中)拉丁语-英语词汇表等。我在这里没有这样做,因为这可能不是您想要的方法。