Как сделать словарь на латексе - PullRequest
0 голосов
/ 02 июля 2019

Я хочу иметь латексные команды такого типа:

\ setdictionary {dictionary_name} {key} {value}

\ getdictionary {dictionary_name} {key}

Эти команды должны делать то же самое, что и картав C ++.

1 Ответ

2 голосов
/ 02 июля 2019

Чтобы определить ассоциативный контейнер, есть несколько инструментов.Самым старым из них является пакет keyval, который каким-то образом заменяется более свежими пакетами, такими как pgfkeys и l3keys из LaTeX3.

l3keys и pgfkeys изначально разрабатываются как средство для передачи параметров макросу в форме key=value.l3keys является пользовательским интерфейсом и должен использоваться с l3prop, который реализует списки свойств, которые можно связать с объектом и получить.Также возможно использовать напрямую l3prop, если не требуется синтаксис key=value.

pgfkeys, вероятно, проще в использовании.Вы можете определить ключи иерархическим способом, установить значения этих ключей и получить их.Базовое использование с pgfkeys и l3:

\documentclass{article}
\usepackage{pgfkeys}
\usepackage{expl3,xparse}
\begin{document}
% pgfkeys version
\pgfkeyssetvalue{/my dictionnary/my entry1}{Hello world!}
\pgfkeysvalueof{/my dictionnary/my entry1}

% with latex3 prop
\ExplSyntaxOn
\prop_new:N \mydict    % define a container (property list)
\prop_new:N \myotherdict % and another one
\NewDocumentCommand \AddToDict { O{\mydict} m m } % add a key to a dictionary default to \mydict
{
  \prop_put:Nnn #1 {#2}{#3}
}
\NewDocumentCommand \GetFromDict { O{\mydict} m } % get a key from a dictionary default \mydict
{
  \prop_item:Nn #1 {#2}
}
\ExplSyntaxOff

\AddToDict{my entry1}{Hello again world!}
\GetFromDict{my entry1}

\AddToDict[\myotherdict]{my entry1}{Hello again again world!}
\GetFromDict[\myotherdict]{my entry1}
\end{document}

Путь LaTeX3 немного сложнее, так как пакет содержит только низкоуровневые библиотечные процедуры.Но это может быть более гибким.Посмотрите на запись l3prop в руководстве по interface3.

В pgfkeys есть много способов ввода значений, их извлечения, установки значений по умолчанию, связывания кода с ключом и т. Д. Посмотрите на «управление ключами» в руководстве по tikz..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...