LaTeX: Extracto de los números y las letras de las variables de comando y la conversión a números romanos

StackOverflow https://stackoverflow.com/questions/3965761

Pregunta

Estoy escribiendo una tesis y han estado buscando en muchas ocasiones tratando de encontrar una solución a mi problema de programación. Básicamente, tengo una serie de artículos que he distinguido en mis datos de la investigación como "A1", "A2", "A3", ..., "A13", "B1", B2" , y así sucesivamente. Estas etiquetas de datos , por cierto, no puedo cambiar ahora porque se ha utilizado en todo mi tesis. siempre están formateados como [caps-carta] [dígitos (longitud de 1 a 2 caracteres)], por ejemplo, X20 o L9. Para cada datos . artículo, quiero asignar un nombre específico Debido a LaTeX no permite que los números en el comando, ya he creado una larga lista de los siguientes tipos de comandos a los nombres de asignar a cada etiqueta de datos:

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

y así sucesivamente. Básicamente, como se puede ver que he nombrado como el comando "\ DataName" seguido de la letra (en mayúsculas), seguido por el número escrito como números romanos. Esto se hizo todo de forma manual, y me hizo esto sólo porque LaTeX no parecía como cualquier números arábigos en el nombre del comando. Si se permite esto, habría utilizado \ DataNameA1 etc.

Por otra parte, también tiene un comando para hacer referencia a los datos específicos:

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

Ahora, quiero asignar ahora un comando de látex que puede tomar una sola variable, la etiqueta de datos (si se trata de "P30" y "A3"), y utilizar el comando \ GotoData como abrir el nombre de los datos correspondientes en el \ DataName *** comandos. Es decir, el tipo \ CompleteData {E10}, por ejemplo, y luego tienen látex carga algo como:

"Este es [Datos E10] nombrado [nombre de Datos para E10]."

Esto significa que el comando podría ser algo como:

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

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

Como se puede ver, el código anterior es incompleta: estoy atascado con el uso de la variable # 1 para generar la necesaria \ DataName *** mando dentro del \ CompleteData newcommand

.

Así que de manera muy básica, veo la única manera como el logro de este resultado es que el extracto de código y convertir el último número (de uno a dos dígitos de longitud) en un número romano. En concreto, he estado tratando de encontrar la manera de hacer algunas cosas:

  1. cómo extraer sólo los dígitos desde el final de un parámetro en una newcommand (tales como los dígitos en mis parámetros "Q31" o "A1").
  2. Del mismo modo extracto de la carta del primer carácter del parámetro
  3. cómo convertir los números a los números

He intentado buscar de muchas maneras diferentes, pero nunca parecen encontrar lo que necesito para responder a estas dos preguntas ... pensé que estaba cerca cuando me encontré este sitio pero más tarde se dio cuenta de que no es lo que busco. Los etextools de látex paquete también parecía prometedor pero estoy demasiado novato (ni siquiera un programador) que tiene mucho sentido de la ayuda PDF que viene con mi instalación texlive (2010). También he leído sobre \ romano y \ romannumeral (por ejemplo, aquí ), pero estos dos comandos causar errores cuando compilo por alguna razón. En mi equipo, \ roman {2} se convierte en "romano", mientras que \ romannumeral {2} se convierte en "2". Eso sí, no entienden cómo funcionan.

Cualquier orientación, código de demostración, o sugerencias sería muy apreciada! Gracias.

¿Fue útil?

Solución

Este es un ejemplo que funciona para mí:

\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 extrae el primer carácter en #1, y el número en #2. Lo hace mediante el hecho de que \FormatDataName toma un argumento delimitado (delimitado por una $ final). Después de eso, es sólo un caso de construir el nombre de la macro que desea llamar (usando \csname), y el uso de \roman dar formato al número como números romanos. (Creo que la razón por la que no se puede conseguir que esto funcione es debido a que no estaban pasando \roman un contador).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top