0

私は論文を書いていて、プログラミングの問題の解決策を見つけようと何度も探しています。基本的に、調査データで「A1」、「A2」、「A3」、…、「A13」、「B1」、「B2」などと区別した一連の項目があります。これらのデータラベルちなみに、これは私の論文全体で使用されているため、今は変更できません。これらは常に[caps-letter] [digit(length of 1 to 2 chars)]としてフォーマットされます(例:X20またはL9)。各データに対してLaTeXではコマンドに数字を使用できないため、各データラベルに名前を割り当てるために、次の種類のコマンドのLONGリストを作成しました。

\newcommand{\DataNameAi}[]%
 {Data name for A1}
\newcommand{\DataNameAii}[]%
 {Data name for A2}
% …
\newcommand{\DataNameXxi}[]%
 {Data name for X11}
% …

等々。基本的に、ご覧のとおり、コマンドに「\ DataName」という名前を付け、その後に文字(大文字)を付け、その後にローマ数字で書き出された数字を付けました。これはすべて手動で行われ、LaTeXがコマンド名のアラビア数字を好まなかったためにのみこれを行いました。これが許可されていれば、\DataNameA1などを使用したでしょう。

他の場所では、データを具体的に参照するコマンドもあります。

\newcommand{\GotoData}[1]%
 {\hyperref[data#1]{Data~#1}}
See data at \Gotodata{E10} % this links to another location labelled \label{dataE10}

ここで、データラベル(「Q30」と「A3」)を1つだけ取ることができるラテックスコマンドを割り当て、\ GotoDataコマンド使用して、対応するデータ名を\に表示します。 DataName***コマンド。つまり、たとえば\ CompleteData {E10}と入力し、LaTeXに次のようなものをロードさせます。

「これは[E10のデータ名]という名前の[データE10]です。」

これは、コマンドが次のようになる可能性があることを意味します。

\newcommand{\CompleteData}[1]%
{This is [\GotoData{#1}] named [\DataNameEx].}

\CompleteData{E10} % <--- this should look like "This is [Data E10] named [Data name for E10]."

ご覧のとおり、上記のコードは不完全です。#1変数を使用して、\CompleteDatanewコマンド内に必要な\DataName***コマンドを生成する方法に固執しています。

非常に基本的に、この結果を達成する唯一の方法は、コードを抽出して最後の数字(1〜2桁の長さ)をローマ数字に変換することだと思います。具体的には、私はいくつかのことを行う方法を理解しようとしています:

  1. 新しいコマンドのパラメーターの末尾から数字だけを抽出する方法(「Q31」または「A1」パラメーターの数字など)。
  2. 同様に、パラメータの最初の文字から文字を抽出します
  3. 数字を数字に変換する方法

いろいろな方法で検索してみましたが、この2つの質問に答えるのに必要なものが見つからないようです…この サイトを見つけたときは近くにいると思っていましたが、後で自分が求めているものではないことに気付きました。etextools LaTeXパッケージも有望に見えましたが、私は初心者(プログラマーでさえも)であり、TexLive(2010)のインストールに付属するヘルプPDFを十分に理解することはできません。\romanと\romannumeral(たとえば、ここ)についても読みましたが、何らかの理由でコンパイルすると、これら2つのコマンドでエラーが発生します。私のコンピューターでは、\ roman {2}は「roman」になり、\romannumeral{2}は「2」になります。それらがどのように機能するかを理解していないだけです。

ガイダンス、デモンストレーションコード、またはヒントをいただければ幸いです。ありがとうございました。

4

1 に答える 1

2

これが私のために働く例です:

\documentclass{article}
\usepackage{hyperref}

\newcommand{\DataNameAii}{Data name for A2}
\newcommand{\GotoData}[1]{\hyperref[data#1]{Data~#1}}

\newcommand{\CompleteData}[1]{This is [\GotoData{#1}] named [\FormatDataName#1$].}
\newcounter{DataNumber}
\def\FormatDataName#1#2${\setcounter{DataNumber}{#2}\csname DataName#1\roman{DataNumber}\endcsname}

\begin{document}
\section{Data A2}\label{dataA2}
\CompleteData{A2}
\end{document}

\FormaDataName最初の文字をに抽出し#1、数字をに抽出し#2ます。\FormatDataNameこれは、区切られた引数(finalで区切られた)を取るという事実を使用して行われます$\csnameその後、(を使用して)呼び出したいマクロ名を作成し、を使用\romanして数値をローマ数字としてフォーマットする場合にすぎません。(これを機能させることができなかった理由は\roman、カウンターを通過していなかったためだと思います)。

于 2010-10-20T08:15:24.823 に答える