![带 xstring 的案例句子](https://linux22.com/image/321204/%E5%B8%A6%20xstring%20%E7%9A%84%E6%A1%88%E4%BE%8B%E5%8F%A5%E5%AD%90.png)
我有一个 LaTeX 文档,它给出了以下错误:
! Argument of \@xs@IfStrEq@@ has an extra }.
该文件内容如下:
\documentclass{article}
%PAQUETES
%\usepackage[arial,utf8]{coolfont}
\usepackage[fasterrors,graphics]{ucs} % para archivos en formato utf8
\usepackage{inputenc} % letras tal cual: ñ, á, etc.
\usepackage[scaled]{uarial} % fuente arial
%\usepackage{lmodern} % fuentes tipo 1
\usepackage{ifthen,ifpdf,parskip,arrayjobx,xstring,xintexpr}
\usepackage{geometry}
%DEFINICIONES
\newcommand{\dec}{1}
\newcommand{\setDec}[1]{\renewcommand{\dec}{#1}}
\newcommand{\idiActivo}{es}
\newcommand{\setIdiActivo}[1]{\renewcommand{\idiActivo}{#1}}
% Procedimiento en castellano
\newarray\procedimientoEs
\procedimientoEs(1)={procedimento de provisión de puestos\xspace}%autonómico m
\procedimientoEs(2)={PROCEDIMENTO DE PROVISIÓN DE PUESTOS\xspace}%autonómico y
\procedimientoEs(3)={Procedimento de Provisión de Puestos\xspace}%autonómico t
\procedimientoEs(4)={Procedimento de provisión de puestos\xspace}%autonómico f
\procedimientoEs(5)={concurso de traslados\xspace}%nacional m
\procedimientoEs(6)={CONCURSO DE TRASLADOS\xspace}%nacional y
\procedimientoEs(7)={Concurso de Traslados\xspace}%nacional t
\procedimientoEs(8)={Concurso de traslados\xspace}%nacional f
% Procedimiento en valenciano.
\newarray\procedimientoVa
\procedimientoVa(1)={procediment de provisió de llocs de treball\xspace}%autonómico m
\procedimientoVa(2)={PROCEDIMENT DE PROVISIÓ DE LLOCS DE TREBALL\xspace}%autonómico y
\procedimientoVa(3)={Procediment de Provisió de Llocs de Treball\xspace}%autonómico t
\procedimientoVa(4)={Procediment de provisió de llocs de treball\xspace}%autonómico f
\procedimientoVa(5)={concurs de trasllats\xspace}%nacional m
\procedimientoVa(6)={CONCURS DE TRASLLATS\xspace}%nacional y
\procedimientoVa(7)={Concurs de Trasllats\xspace}%nacional t
\procedimientoVa(8)={Concurs de trasllats\xspace}%nacional f
% Concurso actual
\newcommand{\concursoAct}{A}% valores posibles: A, N
\newcommand{\setConcursoAct}[1]{\renewcommand{\concursoAct}{#1}}
% Concurso anterior
\newcommand{\concursoAnt}{%
\IfStrEqCase{\concursoAct}{%
{A}{N}%
{N}{A}%
}%
}
\newcommand{\procAnt}[1][m]{%#1: modo
\IfStrEqCase{\idiActivo}{%
{es}{\IfStrEqCase{\concursoAnt}{%
{A}{\IfStrEqCase{#1}{%
{m}{\procedimientoEs(1)}%
{y}{\procedimientoEs(2)}%
{t}{\procedimientoEs(3)}%
{f}{\procedimientoEs(4)}%
}%
}%
{N}{\IfStrEqCase{#1}{%
{m}{\procedimientoEs(5)}%
{y}{\procedimientoEs(6)}%
{t}{\procedimientoEs(7)}%
{f}{\procedimientoEs(8)}%
}%
}%
}%
}%
{va}{\IfStrEqCase{\concursoAnt}{%
{A}{\IfStrEqCase{#1}{%
{m}{\procedimientoVa(1)}%
{y}{\procedimientoVa(2)}%
{t}{\procedimientoVa(3)}%
{f}{\procedimientoVa(4)}%
}%
}%
{N}{\IfStrEqCase{#1}{%
{m}{\procedimientoVa(5)}%
{y}{\procedimientoVa(6)}%
{t}{\procedimientoVa(7)}%
{f}{\procedimientoVa(8)}%
}%
}%
}%
}%
}%
}
%CONFIGURACION
\renewcommand{\familydefault}{\sfdefault}
\inputencoding{utf8x}
\geometry{a4paper,bindingoffset=0pt,margin=1in,headsep=.5in}
%DOCUMENTO
\begin{document}
\concursoAnt
\procAnt
\end{document}
我不知道错误可能出在哪里。欢迎任何帮助
答案1
您正在尝试\concursoAnt
与A
或进行比较N
,但它是
\newcommand{\concursoAnt}{%
\IfStrEqCase{\concursoAct}{%
{A}{N}%
{N}{A}%
}%
}
这意味着它是一组用于生产 或A
的指令N
。
这是一个可能的解决方案:\concursoAnt
宏定义一个新的宏,并将其作为第一步调用\procAnt
。
\documentclass{article}
%PAQUETES
\usepackage[utf8]{inputenc} % letras tal cual: ñ, á, etc.
\usepackage{ifthen,ifpdf,parskip,arrayjobx,xstring,xintexpr}
%DEFINICIONES
\newcommand{\dec}{1}
\newcommand{\setDec}[1]{\renewcommand{\dec}{#1}}
\newcommand{\idiActivo}{es}
\newcommand{\setIdiActivo}[1]{\renewcommand{\idiActivo}{#1}}
% Procedimiento en castellano
\newarray\procedimientoEs
\procedimientoEs(1)={procedimento de provisión de puestos}%autonómico m
\procedimientoEs(2)={PROCEDIMENTO DE PROVISIÓN DE PUESTOS}%autonómico y
\procedimientoEs(3)={Procedimento de Provisión de Puestos}%autonómico t
\procedimientoEs(4)={Procedimento de provisión de puestos}%autonómico f
\procedimientoEs(5)={concurso de traslados}%nacional m
\procedimientoEs(6)={CONCURSO DE TRASLADOS}%nacional y
\procedimientoEs(7)={Concurso de Traslados}%nacional t
\procedimientoEs(8)={Concurso de traslados}%nacional f
% Procedimiento en valenciano.
\newarray\procedimientoVa
\procedimientoVa(1)={procediment de provisió de llocs de treball}%autonómico m
\procedimientoVa(2)={PROCEDIMENT DE PROVISIÓ DE LLOCS DE TREBALL}%autonómico y
\procedimientoVa(3)={Procediment de Provisió de Llocs de Treball}%autonómico t
\procedimientoVa(4)={Procediment de provisió de llocs de treball}%autonómico f
\procedimientoVa(5)={concurs de trasllats}%nacional m
\procedimientoVa(6)={CONCURS DE TRASLLATS}%nacional y
\procedimientoVa(7)={Concurs de Trasllats}%nacional t
\procedimientoVa(8)={Concurs de trasllats}%nacional f
% Concurso actual
\newcommand{\concursoAct}{A}% valores posibles: A, N
\newcommand{\setConcursoAct}[1]{\renewcommand{\concursoAct}{#1}}
% Concurso anterior
\newcommand{\concursoAnt}{%
\IfStrEqCase{\concursoAct}{%
{A}{\def\concursoValue{N}}%
{N}{\def\concursoValue{A}}%
}%
}
\newcommand{\procAnt}[1][m]{%#1: modo
\concursoAnt % set \concursoValue
\IfStrEqCase{\idiActivo}{%
{es}{\IfStrEqCase{\concursoValue}{%
{A}{\IfStrEqCase{#1}{%
{m}{\procedimientoEs(1)}%
{y}{\procedimientoEs(2)}%
{t}{\procedimientoEs(3)}%
{f}{\procedimientoEs(4)}%
}%
}%
{N}{\IfStrEqCase{#1}{%
{m}{\procedimientoEs(5)}%
{y}{\procedimientoEs(6)}%
{t}{\procedimientoEs(7)}%
{f}{\procedimientoEs(8)}%
}%
}%
}%
}%
{va}{\IfStrEqCase{\concursoValue}{%
{A}{\IfStrEqCase{#1}{%
{m}{\procedimientoVa(1)}%
{y}{\procedimientoVa(2)}%
{t}{\procedimientoVa(3)}%
{f}{\procedimientoVa(4)}%
}%
}%
{N}{\IfStrEqCase{#1}{%
{m}{\procedimientoVa(5)}%
{y}{\procedimientoVa(6)}%
{t}{\procedimientoVa(7)}%
{f}{\procedimientoVa(8)}%
}%
}%
}%
}%
}%
}
%DOCUMENTO
\begin{document}
\procAnt
\procAnt[y]
\procAnt[t]
\procAnt[f]
\setConcursoAct{N}
\procAnt
\procAnt[y]
\procAnt[t]
\procAnt[f]
\end{document}
请注意,我删除了ucs
赞成的utf8
。无论如何,你必须在定义字符串之前设置输入编码,否则从 UTF-8 到 LaTeX 命令的转换将不起作用。
这是一个不同的界面,使用expl3
。
\documentclass{article}
%PAQUETES
\usepackage[utf8]{inputenc} % letras tal cual: ñ, á, etc.
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\concurso}{O{}m}
{
\group_begin:
\keys_set:nn { delgado/concurso } { #1 }
\delgado_print_competition_title:n { #2 }
\group_end:
}
\keys_define:nn { delgado/concurso }
{
language .tl_set:N = \l_delgado_competition_language_tl,
local .bool_set:N = \l_delgado_competition_national_bool,
local .default:n = false,
national .bool_set:N = \l_delgado_competition_national_bool,
national .default:n = true,
language .initial:n = es,
national .initial:n = true,
}
\prop_new:N \g_delgado_competition_titles_prop
% Procedimiento en castellano
\prop_gput:Nnn \g_delgado_competition_titles_prop { es a m }
{procedimento ~ de ~ provisión ~ de ~ puestos}%autonómico m
\prop_gput:Nnn \g_delgado_competition_titles_prop { es a y }
{PROCEDIMENTO ~ DE ~ PROVISIÓN ~ DE ~ PUESTOS}%autonómico y
\prop_gput:Nnn \g_delgado_competition_titles_prop { es a t }
{Procedimento ~ de ~ Provisión ~ de ~ Puestos}%autonómico t
\prop_gput:Nnn \g_delgado_competition_titles_prop { es a f }
{Procedimento ~ de ~ provisión ~ de ~ puestos}%autonómico f
\prop_gput:Nnn \g_delgado_competition_titles_prop { es n m }
{concurso ~ de ~ traslados}%nacional m
\prop_gput:Nnn \g_delgado_competition_titles_prop { es n y }
{CONCURSO ~ DE ~ TRASLADOS}%nacional y
\prop_gput:Nnn \g_delgado_competition_titles_prop { es n t }
{Concurso ~ de ~ Traslados}%nacional t
\prop_gput:Nnn \g_delgado_competition_titles_prop { es n f }
{Concurso ~ de ~ traslados}%nacional f
% Procedimiento en valenciano
\prop_gput:Nnn \g_delgado_competition_titles_prop { va a m }
{procediment ~ de ~ provisió ~ de ~ llocs ~ de ~ treball}%autonómico m
\prop_gput:Nnn \g_delgado_competition_titles_prop { va a y }
{PROCEDIMENT ~ DE ~ PROVISIÓ ~ DE ~ LLOCS ~ DE ~ TREBALL}%autonómico y
\prop_gput:Nnn \g_delgado_competition_titles_prop { va a t }
{Procediment ~ de ~ Provisió ~ de ~ Llocs ~ de ~ Treball}%autonómico t
\prop_gput:Nnn \g_delgado_competition_titles_prop { va a f }
{Procediment ~ de ~ provisió ~ de ~ llocs ~ de ~ treball}%autonómico f
\prop_gput:Nnn \g_delgado_competition_titles_prop { va n m }
{concurs ~ de ~ trasllats}%nacional m
\prop_gput:Nnn \g_delgado_competition_titles_prop { va n y }
{CONCURS ~ DE ~ TRASLLATS}%nacional y
\prop_gput:Nnn \g_delgado_competition_titles_prop { va n t }
{Concurs ~ de ~ Trasllats}%nacional t
\prop_gput:Nnn \g_delgado_competition_titles_prop { va n f }
{Concurs ~ de ~ trasllats}%nacional f
\cs_new_protected:Nn \delgado_print_competition_title:n
{
\prop_get:Nx \g_delgado_competition_titles_prop
{
\l_delgado_competition_language_tl % language string
\bool_if:NTF \l_delgado_competition_national_bool { n } { a } % local or national
#1 % mytf
}
}
\cs_generate_variant:Nn \prop_get:Nn { Nx }
\ExplSyntaxOff
%DOCUMENTO
\begin{document}
\concurso{m}
\concurso{y}
\concurso{t}
\concurso{f}
\concurso[local]{m}
\concurso[local,language=va]{y}
\end{document}