2016-06-05 2 views
1

При чтении из файла csv пакет LaTeX csvsimple обновляет значение переменной, например \location, идентифицируя определенный столбец.LaTeX: Условное выполнение оператора при изменении переменной

Я бы хотел, чтобы значение \location отображалось в тексте, только когда его значение действительно изменяется.

Следующая часть кода не работает.

\documentclass{article} 
    \usepackage{csvsimple} 
    \usepackage{ifthen} 
    \begin{document} 

    \def\oldlocation{} 

    \csvreader[head to column names,separator=tab]{input.tab}{}{% 
     \ifthenelse{\equal{\oldlocation}{\location}}{\relax}{% 
      \begin{center}\location{}\end{center} 
      \element{}\\ 
      \renewcommand{\oldlocation}{\location}} 
    } 
    \end{document} 

образец input.tab:

location[tab]element 
    Shelf 1 [tab] Item A 
    Shelf 1 [tab] Item B 
    Shelf 1 [tab] Item C 
    Shelf 1 [tab] Item D 
    Shelf 1 [tab] Item E 
    Shelf 2 [tab] Item F 
    Shelf 2 [tab] Item G 
    Shelf 2 [tab] Item H 
    Shelf 2 [tab] Item I 
    Shelf 2 [tab] Item J 
    Shelf 3 [tab] Item K 
    Shelf 3 [tab] Item L 
    Shelf 3 [tab] Item M 
    Shelf 3 [tab] Item N 
    Shelf 3 [tab] Item O 

Ожидаемый результат:

  Shelf 1 
Item A 
Item B 
Item C 
Item D 
Item E 
      Shelf 2 
Item F 
Item G 
Item H 
Item I 
Item J 
      Shelf 3 
Item K 
Item L 
Item M 
Item N 
Item O 
+0

@Werner: Да, спасибо. Пожалуйста, см. Отредактированный вопрос. – ggna

ответ

1

Проблема с вашей текущей установки является обновление \oldlocation. Использование

\renewcommand{\oldlocation}{\location} 

не расширяет \location до его нынешнего значения. Он просто устанавливает \oldlocation для вызова \location при выполнении. Это фиксируется при использовании

\edef\oldlocation{\location} 

ниже код обеспечивает то, что вы после того, как с некоторыми незначительными повторных механизмов условного кода:

enter image description here

\documentclass{article} 

\usepackage{csvsimple} 

\begin{document} 

\def\oldlocation{} 

\csvreader[head to column names,separator=tab]{input.tab}{}{% 
    \expandafter\ifx\expandafter\oldlocation\location\else 
    \begin{center}\location{}\end{center}% 
    \edef\oldlocation{\location} 
    \fi 
    \element{}\\ 
} 

\end{document} 

Вы могли бы также использоваться следующий e-TeX условный:

\ifnum\pdfstrcmp{\oldlocation}{\location}=0\else 

который сравнивает str расширение \oldlocation с \location и возврат 0 из них равны.


Вы можете также рассмотреть возможность использования datatool для такого рода установок.

Смежные вопросы